找回密码
 欢迎注册
楼主: 无心人

[讨论] 快速计算10^12以内全部卡米切尔数

[复制链接]
发表于 2008-3-27 10:00:38 | 显示全部楼层
直接筛选的确可以设计出一个不错的算法,不过感觉计算到M=10^12还是比较花费时间。应该比筛选素数的代码还要慢一些。
首先我们计算出所有不超过707107的素数(也就是(2p-1)p<10^12)
然后对于每个素数p,做如下筛选:
i)删除p,p^2,p^3,... (也就是删除所有p的整数幂)
ii)
  1. for(i=2*p,t=2;i<M;i+=p,t++){
  2.               if(t==p){///这里说明i=1(mod p-1)
  3.                     t=1;
  4.               }else{///这里说明i!=1(mod p-1)
  5.                    删除候选数 i;
  6.              }
  7.      }
复制代码
通过上面筛选,余下就是卡米切尔数了。(当然所有偶数可以事先删除)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-27 10:16:50 | 显示全部楼层
我的浅见:
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-27 10:26:51 | 显示全部楼层
假设卡米切尔数n由d个奇素数组成,分别记为p(1),p(2),...,p(d).
1<=r<d.
记Pr=p(1)*p(2)*...*p(r),Qr=p(r+1)*...*p(d),Tr=LCM((p(1)-1)*(p(2)-1)*...*(p(d)-1)).
那么,有n=Pr*Qr=1 mod Tr
先搜索前r个素数,Pr和Tr也就可以确定,我们利用扩展的gcd算法,是否可以确定Qr?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-27 10:49:01 | 显示全部楼层
应是:Tr=LCM((p(1)-1),(p(2)-1),...,(p(d)-1)).
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-3-27 11:46:01 | 显示全部楼层
mathe啊
通过那些筛选只是候选而已啊
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-27 12:58:41 | 显示全部楼层
我那个筛法留下来不仅仅是候选数。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-3-27 13:41:56 | 显示全部楼层
那就筛下<10000看剩下的是不是?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-27 14:17:27 | 显示全部楼层
运行了一下,的确有些错误,第一步改成筛所有p^2的倍数就可以了。原先以为可以省略的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-27 14:19:27 | 显示全部楼层
运行了一下
2^30以前应该有75541546个,如果仅仅统计不输出需要花费32.6秒。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-3-27 14:23:41 | 显示全部楼层
结果太多

这种数很稀少的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-22 07:40 , Processed in 0.045290 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表