怎样生成一个大素数(32位计算机不能表示的大素数)

能生成在理论上无限位的大素数,当然实际在计算机硬件能够承受范围内。此时的素数不能用普通的类型(比如int,long)表示,而应该用数据结构来表示,比如数组,链表等。请给出一个函数,用来生成大素数,可以自己决定生成的位数。比如:
char* getPrime(const char* str, const int nsize );这里是把大素数当作字符串来处理的,当然你可以用链表等。nsize是表示生成的字节数(至少应该在16字节也就是128比特),也就是如果打印出来至少有16个十进制位。
请能够回答问题的来,最好给出函数的实现。像一,二楼那样就不用回答了。6日晚如果没满意答案就撤销了,提供满意答案+100

第1个回答  2008-04-02
首先,得把要输出的大素数定义为字符数组,这样才可以放足够大的数。
接着把这个字符串的长度+1除以2的长度即位数,如20+1的一半为10,再从0到10的10次幂之间进行判断。当然得用到大数除的思想,即把大数从高位除到低位,这样应该不难。通过余数来判断。这样就可以了。主要思想大概我认为是这样。
第2个回答  2008-04-02
这个用字符串也可以不过可能效率比较低.
还是推荐用类似数组的容器.你后边的SIZE本身就是给里面用来new的。

不过这个计算可能也很慢,毕竟验证一个数是不是素数就不是一个快速的工作(有加密算法都利用这个的)

但是算法不难,需要重载几个运算符,进行大数运算.
最后整个的地方就变成大数计算的问题了,你可以搜索下,网上这个很多,ACM 大数计算。

弄个大数计算的类,你就把那数当普通数用,不用考虑范围了。本回答被网友采纳
第3个回答  2008-04-01
无符号的长整型?
无符号的长整型长度是0~4294967295
多加几个……
申请内存区域加入数值
第4个回答  2008-04-01
首先,本人听说dev c++可以无限的用long修饰。。。哈哈,很艺术。

其次,得用数论的知识来解答吧,本人数论不好,待答案学习。
相似回答
大家正在搜