
以前我写过一个求打整数的程序,可以给你解释下大概的思路
先说说大整数怎么定义吧,我是用一个类来写的,支持1024位的大整数,整数是用数组来装的,长度可以自己设。然后定义了相关的成员函数,如四则运算,当然也包含了你所说的素性检测。这里用的素性检测的算法是拉宾米勒算法,这个算法可以判断大整数是否有可能是素数,函数名为Rab。如果你想得到大素数,可以看看素性检测相关的资料,拉宾米勒算法是最常用的算法。类里也写了个GetPrime函数用于获得大素数。类的定义如下:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define BI_MAXLEN 64
class CBigNumber
{
public:
//大数在0x100000000进制下的长度
unsigned m_nLength;
//用数组记录大数在0x100000000进制下每一位的值
unsigned long m_ulValue[BI_MAXLEN];
CBigNumber();
~CBigNumber();
/
基本 *** 作与运算
Mov,赋值运算,可赋值为大数或普通整数
Cmp,比较运算,比较两个大数或两个普通整数的大小
Add,加,求大数与大数或大数与普通整数的和
Sub,减,求大数与大数或大数与普通整数的差
Mul,乘,求大数与大数或大数与普通整数的积
Div,除,求大数与大数或大数与普通整数的商
Mod,模,求大数与大数或大数与普通整数的模
Pow,乘方,求大数与普通整数的乘方
/
void Mov(unsigned __int64 A);
void Mov(CBigNumber A);
CBigNumber Add(CBigNumber A);
CBigNumber Sub(CBigNumber A);
CBigNumber Mul(CBigNumber A);
CBigNumber Div(CBigNumber A);
CBigNumber Mod(CBigNumber A);
CBigNumber Add(unsigned long A);
CBigNumber Sub(unsigned long A);
CBigNumber Mul(unsigned long A);
CBigNumber Div(unsigned long A);
unsigned long Mod(unsigned long A);
int Cmp(CBigNumber A);
CBigNumber Pow(unsigned long A);
/
输入输出
Get,从字符串按10进制或16进制格式输入到大数
Put,将大数按10进制或16进制格式输出到字符串
/
// void Get(unsigned char str, UINT len);
CBigNumber Get(unsigned char str, unsigned long len);
void Put10(CString &str);
void Put256(CString &str);
void Put16(CString &str);
void Putchar(CString &str);
/
RSA相关运算
Rab,拉宾米勒算法进行素数测试
Euc,欧几里德算法求解同余方程
Mon,蒙格马利法进行幂模运算
GetPrime,产生指定长度的随机大素数
/
int Rab();
CBigNumber Euc(CBigNumber A);
//CBigNumber RsaTrans(CBigNumber A, CBigNumber B);
CBigNumber Mon(CBigNumber A, CBigNumber B);
void GetPrime(int bits);
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
最后提醒楼主一点,大素数不是靠从1到那个数减1那样算的,因为那样真的很慢的
还有,这个只是一个类的定义,实现部分你可以按自己的想法定义,当然如果有不懂可以找我,我有它的实现部分
消息队列(MQ),M是一种可执行的代码文件格式。
1、在840d的NC程序中MQ是一种应用程序对应用程序的通信方法,应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。
2、840d的NC程序中Mm是一种可执行的代码文件格式,是Wolfram语言程序包源格式,用于存储和交换Wolfram语言程序、程序包和数据,纯ASCII文本格式,以InputForm形式存储Wolfram语言的表达式。
如果平板电脑上装了windows的话,就能装Mathematica和matlab,就是跑得慢一点,当年我们用奔腾266的电脑,性能可能还不如现在的双核手机呢,同样写了很多程序,画了很多的图。
我还知道一个解决方案(见过一个同学在用),就是在台式机上装一个matlab,然后在ipad上装一个客户端,输入代码之后ipad的matlab客户端通过局域网和台式机完成交互计算。这样既可以方便地移动,同时又可以发挥台式机的性能。
以上就是关于求教用C++编写产生随机大素数程序,以及验证输入的数为素数的各种思路方法全部的内容,包括:求教用C++编写产生随机大素数程序,以及验证输入的数为素数的各种思路方法、840d的NC程序中M和MQ意思、Ipad 或平板电脑能用Mathematica matlab等软件吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)