回复 5# 的帖子
你就直接说是3的倍数更好理解,看了半天才明白555。对 6 楼代码的一点小改进
将 6# 如下代码: integer x("123456789");for(i=2;i<=6;i++){
for(j=k;j<10*k;j++){
x*=k*10;
x+=j;
if((!buff)&&x.IsPrime()){
printf("Found: %s\n",x.GetStr());
count++;
}改成: integer x("123456789");
integer tail;
for(i=2;i<=6;i++){
for(j=k;j<10*k;j++){
tail.DecLShift( i );
tail += j;
if ( !buff )
{
x.DecLShift( tail.GetDigits() );
x += tail;
tail = 0;
if ( x.IsPrime())
{
printf("Found: %s\n",x.GetStr());
count++;
}
}改进后仅在需要时才移位追加新的数字,减少大整数的移位次数,
之前则用一个长度较小的 tail 处理(它的移位代价要小得多)。
在我的机器上,前端的 filter 需要很长很长时间才能准备完成。。。 :)
是否做过小因子分解
每个数字是否存在有规律的小因子
那样能排除一大批数字 :)
我猜测在10^8以内存在一个素数
对应数字应该大于10^100000000
所以该问题应该提交到大型机 原帖由 mathe 于 2008-4-23 12:18 发表 http://images.5d6d.net/dz60/common/back.gif
这三个数有什么特殊的?好像都挺慢
8053素性判断需要8.1分钟,10279需要16.3分钟,36583还没有运行出来,到出来再看吧:lol
晕36583运行了5小时差4分钟出来了。
原帖由 无心人 于 2008-4-23 17:30 发表 http://images.5d6d.net/dz60/common/back.gif
:)
我猜测在10^8以内存在一个素数
对应数字应该大于10^100000000
所以该问题应该提交到大型机
上面的程序中已经将所有包含小于100000因子的数事先筛选了,(而且我试验过事先筛选1000000以内的因子,区别不大)。而现在主要问题在于对于这些超大数据,素性判断太慢了,比如上面的36583要运行5小时 :)
5个小时算少的
我运行GIMPS一个多月才能判定一个梅森数呢 要不然你运行一下看看,假设我上面估计估计不错,也就是两个月左右可以穷举到100000,有11%可能性能够找到一个素数。:lol :)
你加上定时存盘和冗余纠错
我给你挂服务器上三个月 原帖由 gogdizzy 于 2008-4-23 14:15 发表 http://images.5d6d.net/dz60/common/back.gif
你就直接说是3的倍数更好理解,看了半天才明白555。
呵呵,你可以将它当成一种练习:)