求教用C++编写产生随机大素数程序,以及验证输入的数为素数的各种思路方法

求教用C++编写产生随机大素数程序,以及验证输入的数为素数的各种思路方法,第1张

以前我写过一个求打整数的程序,可以给你解释下大概的思路

先说说大整数怎么定义吧,我是用一个类来写的,支持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等软件吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9766230.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存