找回密码
 欢迎注册
楼主: 056254628

[擂台] 连续100个整数末尾加上11后都是合数

[复制链接]
发表于 2009-10-8 15:33:06 | 显示全部楼层
贴一段使用了HugeCalc的代码(其实就是为了求素数和数论倒数的代码)

  1. #define BUF_LEN (1<<27)
  2. #define MAX_PRIME 655360
  3. int mask[BUF_LEN];
  4. unsigned plist[MAX_PRIME];
  5. int pc;
  6. #define GETWORD(x)  ((x)>>5)
  7. #define GETOFF(x)   ((x)&31)
  8. #define OFFBIT(x)   (1<<GETOFF(x))
  9. #define SET_BIT(x)  (mask[GETWORD(x)]|=OFFBIT(x))
  10. #define TEST_BIT(x) ((mask[GETWORD(x)]&OFFBIT(x))!=0)
  11. void unmask(int prime)
  12. {
  13.         int inv=HugeCalc::InvertMod(100,prime);
  14.         int u=prime-11;
  15.         while(u<0)u+=prime;
  16.         u*=inv;
  17.         u%=prime;
  18.         if(u*100+11!=prime){
  19.                 SET_BIT(u);
  20.         }
  21.         unsigned v=u+prime;
  22.         for(;v>prime;v+=prime){
  23.                 SET_BIT(v);
  24.         }
  25. }

  26. void check_list()
  27. {
  28.         int cur_len=0;
  29.         int max_len=0;
  30.         unsigned v=0;
  31.         do{
  32.                 if(TEST_BIT(v)){
  33.                         cur_len++;
  34.                         if(cur_len>max_len){
  35.                                 printf("f[%d]=%u\n",cur_len,v-cur_len+1);
  36.                                 max_len=cur_len;
  37.                         }
  38.                 }else{
  39.                         cur_len=0;
  40.                 }
  41.         }while(++v!=0);
  42. }

  43. int main()
  44. {
  45.         HugeCalc::EnableTimer();
  46.         pc=HugeCalc::GetPrimeList(plist,MAX_PRIME,7,MAX_PRIME);
  47.         unmask(3);
  48.         unsigned timer=HugeCalc::GetTimer();
  49.         int i;
  50.         printf("Total num prime %d, %dus\n",pc,timer);
  51.         for(i=0;i<pc;i++){
  52.                 unmask(plist[i]);
  53.                 if(i%100==99){
  54.                         timer=HugeCalc::GetTimer();
  55.                 }
  56.         }
  57.         timer=HugeCalc::GetTimer();
  58.         printf("Total prime masked,%dus\n",timer);
  59.         check_list();
  60.         timer=HugeCalc::GetTimer();
  61.         printf("Total cost %dus\n",timer);
  62. }
复制代码
可以计算到f(131)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-10-8 15:36:23 | 显示全部楼层
f[1]=1
f[2]=4
f[3]=4
f[4]=4
f[5]=4
f[6]=43
f[7]=43
f[8]=145
f[9]=145
f[10]=145
f[11]=145
f[12]=145
f[13]=145
f[14]=145
f[15]=145
f[16]=145
f[17]=652
f[18]=652
f[19]=652
f[20]=652
f[21]=4347
f[22]=4902
f[23]=4902
f[24]=5248
f[25]=5248
f[26]=5248
f[27]=8083
f[28]=8083
f[29]=8083
f[30]=8083
f[31]=8083
f[32]=8083
f[33]=8083
f[34]=8083
f[35]=8083
f[36]=8083
f[37]=8083
f[38]=38335
f[39]=44875
f[40]=44875
f[41]=44875
f[42]=44875
f[43]=44875
f[44]=46711
f[45]=51481
f[46]=51481
f[47]=80101
f[48]=80101
f[49]=80101
f[50]=223312
f[51]=223312
f[52]=223312
f[53]=223312
f[54]=417643
f[55]=417643
f[56]=417643
f[57]=417643
f[58]=417643
f[59]=417643
f[60]=417643
f[61]=417643
f[62]=417643
f[63]=417643
f[64]=417643
f[65]=1239046
f[66]=1239046
f[67]=1239046
f[68]=1239046
f[69]=1239046
f[70]=1239046
f[71]=1767661
f[72]=3848451
f[73]=4157752
f[74]=4157752
f[75]=4543498
f[76]=4543498
f[77]=4543498
f[78]=4543498
f[79]=4543498
f[80]=4543498
f[81]=4543498
f[82]=4543498
f[83]=4543498
f[84]=4543498
f[85]=4543498
f[86]=5346948
f[87]=5346948
f[88]=5346948
f[89]=5346948
f[90]=5346948
f[91]=5346948
f[92]=5346948
f[93]=5346948
f[94]=5346948
f[95]=5346948
f[96]=5346948
f[97]=5346948
f[98]=5346948
f[99]=5346948
f[100]=5346948
f[101]=5346948
f[102]=5346948
f[103]=5346948
f[104]=5346948
f[105]=5346948
f[106]=5346948
f[107]=5346948
f[108]=5346948
f[109]=5346948
f[110]=5346948
f[111]=5346948
f[112]=78072010
f[113]=78072010
f[114]=78072010
f[115]=78072010
f[116]=78072010
f[117]=78072010
f[118]=78072010
f[119]=177901414
f[120]=177901414
f[121]=177901414
f[122]=177901414
f[123]=177901414
f[124]=177901414
f[125]=177901414
f[126]=177901414
f[127]=177901414
f[128]=177901414
f[129]=177901414
f[130]=177901414
f[131]=177901414
Total cost 168583741us
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-10-8 15:38:09 | 显示全部楼层
同9#结果不匹配,看来有BUG,谁来调试一下?我有事要出去了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-10-8 18:42:45 | 显示全部楼层
找到一个bug,函数unmask中乘法可能会溢出,需要修改
  1. void unmask(int prime)
  2. {
  3.         int inv=HugeCalc::InvertMod(100,prime);
  4.         int u=prime-11;
  5.         while(u<0)u+=prime;
  6.         u=((long long)u*inv)%prime;
  7.         if(u*100+11!=prime){
  8.                 SET_BIT(u);
  9.         }
  10.         unsigned v=u+prime;
  11.         for(;v>prime;v+=prime){
  12.                 SET_BIT(v);
  13.         }
  14. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-10-8 18:46:19 | 显示全部楼层
修正以后的结果:
f[1]=1
f[2]=4
f[3]=4
f[4]=4
f[5]=10
f[6]=43
f[7]=43
f[8]=145
f[9]=145
f[10]=145
f[11]=361
f[12]=361
f[13]=361
f[14]=361
f[15]=448
f[16]=448
f[17]=652
f[18]=652
f[19]=652
f[20]=652
f[21]=4347
f[22]=5605
f[23]=6217
f[24]=6217
f[25]=6217
f[26]=6217
f[27]=8083
f[28]=8083
f[29]=8083
f[30]=8083
f[31]=8083
f[32]=8452
f[33]=8452
f[34]=8452
f[35]=23284
f[36]=23284
f[37]=23284
f[38]=23284
f[39]=23284
f[40]=23284
f[41]=23284
f[42]=44875
f[43]=44875
f[44]=46711
f[45]=80101
f[46]=80101
f[47]=80101
f[48]=80101
f[49]=80101
f[50]=417643
f[51]=417643
f[52]=417643
f[53]=417643
f[54]=417643
f[55]=417643
f[56]=417643
f[57]=417643
f[58]=417643
f[59]=417643
f[60]=417643
f[61]=417643
f[62]=417643
f[63]=417643
f[64]=417643
f[65]=1239046
f[66]=1239046
f[67]=1239046
f[68]=1239046
f[69]=1239046
f[70]=1239046
f[71]=5585445
f[72]=5585445
f[73]=5585445
f[74]=5585445
f[75]=5585445
f[76]=12264717
f[77]=12264717
f[78]=12264717
f[79]=13991758
f[80]=13991758
f[81]=16775473
f[82]=16775473
f[83]=17946187
f[84]=17946187
f[85]=17946187
f[86]=17946187
f[87]=17946187
f[88]=17946187
f[89]=17946187
f[90]=17946187
f[91]=17946187
f[92]=17946187
f[93]=17946187
f[94]=17946187
f[95]=30804307
f[96]=30804307
f[97]=30804307
f[98]=30804307
f[99]=30804307
f[100]=30804307
f[101]=75839734
f[102]=75839734
f[103]=75839734
f[104]=75839734
f[105]=75839734
f[106]=75839734
f[107]=78072010
f[108]=78072010
f[109]=78072010
f[110]=78072010
f[111]=78072010
f[112]=78072010
f[113]=78072010
f[114]=78072010
f[115]=78072010
f[116]=78072010
f[117]=78072010
f[118]=78072010
f[119]=177901414
f[120]=177901414
f[121]=177901414
f[122]=177901414
f[123]=177901414
f[124]=177901414
f[125]=177901414
f[126]=177901414
f[127]=177901414
f[128]=177901414
f[129]=177901414
f[130]=177901414
f[131]=177901414
f[132]=554979631
f[133]=554979631
f[134]=648847533
f[135]=648847533
f[136]=648847533
f[137]=648847533
f[138]=648847533
f[139]=648847533
f[140]=648847533
f[141]=648847533
f[142]=648847533
f[143]=648847533
f[144]=648847533
f[145]=648847533
f[146]=648847533
f[147]=648847533
f[148]=648847533
f[149]=648847533
f[150]=3539248351
f[151]=3539248351
f[152]=3539248351
f[153]=3539248351
f[154]=3539248351
f[155]=3539248351
f[156]=3539248351
f[157]=3539248351
f[158]=3539248351
f[159]=3539248351
f[160]=3539248351
f[161]=3539248351
f[162]=3539248351
f[163]=3539248351
f[164]=3539248351
f[165]=3539248351
f[166]=3539248351
f[167]=3539248351
f[168]=3539248351
f[169]=3539248351
f[170]=3539248351
Total cost 213745877us
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-10-8 22:22:31 | 显示全部楼层
本帖最后由 056254628 于 2009-10-8 22:24 编辑

mathe的程序是不是还有Bug?
m<=49的结果和我的一样。但是我算出的:
f(51)=175623   f(54)=220659
---------------------------------------
比mathe的小很多。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-10-9 13:30:08 | 显示全部楼层
的确,如下修改:>改为>=
  1. void unmask(int prime)
  2. {
  3.         int inv=HugeCalc::InvertMod(100,prime);
  4.         int u=prime-11;
  5.         while(u<0)u+=prime;
  6.         u=((long long)u*inv)%prime;
  7.         if(u*100+11!=prime){
  8.                 SET_BIT(u);
  9.         }
  10.         unsigned v=u+prime;
  11.         for(;v>=prime;v+=prime){
  12.                 SET_BIT(v);
  13.         }
  14. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-10-9 13:33:18 | 显示全部楼层
Total num prime 53225,
Total prime masked,1691
f[1]=1
f[2]=4
f[3]=4
f[4]=4
f[5]=10
f[6]=43
f[7]=43
f[8]=145
f[9]=145
f[10]=145
f[11]=361
f[12]=361
f[13]=361
f[14]=361
f[15]=448
f[16]=448
f[17]=652
f[18]=652
f[19]=652
f[20]=652
f[21]=4347
f[22]=5605
f[23]=6217
f[24]=6217
f[25]=6217
f[26]=6217
f[27]=8083
f[28]=8083
f[29]=8083
f[30]=8083
f[31]=8083
f[32]=8452
f[33]=8452
f[34]=8452
f[35]=23284
f[36]=23284
f[37]=23284
f[38]=23284
f[39]=23284
f[40]=23284
f[41]=23284
f[42]=44875
f[43]=44875
f[44]=46711
f[45]=80101
f[46]=80101
f[47]=80101
f[48]=80101
f[49]=80101
f[50]=175623
f[51]=175623
f[52]=220659
f[53]=220659
f[54]=220659
f[55]=357075
f[56]=357075
f[57]=357075
f[58]=357075
f[59]=357075
f[60]=357075
f[61]=357075
f[62]=357075
f[63]=357075
f[64]=357075
f[65]=357075
f[66]=1239046
f[67]=1239046
f[68]=1239046
f[69]=1239046
f[70]=1239046
f[71]=4225245
f[72]=4225245
f[73]=4225245
f[74]=4225245
f[75]=4225245
f[76]=4225245
f[77]=4225245
f[78]=4225245
f[79]=4242612
f[80]=4242612
f[81]=4242612
f[82]=4242612
f[83]=4242612
f[84]=4242612
f[85]=4242612
f[86]=4242612
f[87]=4242612
f[88]=4242612
f[89]=4242612
f[90]=4242612
f[91]=4242612
f[92]=4242612
f[93]=4242612
f[94]=4242612
f[95]=4242612
f[96]=4242612
f[97]=4242612
f[98]=4242612
f[99]=7135851
f[100]=23717773
f[101]=23717773
f[102]=23717773
f[103]=23717773
f[104]=23717773
f[105]=23717773
f[106]=23717773
f[107]=23717773
f[108]=23717773
f[109]=23717773
f[110]=23717773
f[111]=23717773
f[112]=23717773
f[113]=23717773
f[114]=23717773
f[115]=23717773
f[116]=23717773
f[117]=23717773
f[118]=23717773
f[119]=23717773
f[120]=23717773
f[121]=23717773
f[122]=23717773
f[123]=23717773
f[124]=23717773
f[125]=167369311
f[126]=167369311
f[127]=167369311
f[128]=167369311
f[129]=167369311
f[130]=167369311
f[131]=167369311
f[132]=167369311
f[133]=167369311
f[134]=167369311
f[135]=167369311
f[136]=167369311
f[137]=167369311
f[138]=167369311
f[139]=167369311
f[140]=167369311
f[141]=167369311
f[142]=167369311
f[143]=167369311
f[144]=339898777
f[145]=339898777
f[146]=339898777
f[147]=339898777
f[148]=339898777
f[149]=339898777
f[150]=339898777
f[151]=339898777
f[152]=339898777
f[153]=339898777
f[154]=339898777
f[155]=339898777
f[156]=339898777
f[157]=339898777
f[158]=1307096556
f[159]=1307096556
f[160]=1307096556
f[161]=1307096556
f[162]=1307096556
f[163]=1307096556
f[164]=1307096556
f[165]=1307096556
f[166]=1550482953
f[167]=1550482953
f[168]=1550482953
f[169]=1550482953
f[170]=1550482953
f[171]=3539248312
f[172]=3539248312
f[173]=3539248312
f[174]=3539248312
f[175]=3539248312
f[176]=3539248312
f[177]=3539248312
f[178]=3539248312
f[179]=3539248312
f[180]=3539248312
f[181]=3539248312
f[182]=3539248312
f[183]=3539248312
f[184]=3539248312
f[185]=3539248312
f[186]=3539248312
f[187]=3539248312
f[188]=3539248312
f[189]=3539248312
f[190]=3539248312
f[191]=3539248312
f[192]=3539248312
f[193]=3539248312
f[194]=3539248312
f[195]=3539248312
f[196]=3539248312
f[197]=3539248312
f[198]=3539248312
f[199]=3539248312
f[200]=3539248312
f[201]=3539248312
f[202]=3539248312
f[203]=3539248312
f[204]=3539248312
f[205]=3539248312
f[206]=3539248312
f[207]=3539248312
f[208]=3539248312
f[209]=3539248312
Total cost 183552557us
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-10-9 14:44:38 | 显示全部楼层
[100]=30804307?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-10-9 14:53:01 | 显示全部楼层
mathe 的结果是对的。[100]=23717773
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-4-27 07:26 , Processed in 0.045484 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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