mathe 发表于 2022-9-19 15:16:24

试验了一下先筛选,在gmp概率素数测试,在我笔记本上,
test 10 cost 6s
test 20 cost 11s
test 30 cost 17s
test 40 cost 23s
test 50 cost 28s
test 60 cost 34s
test 70 cost 40s
test 80 cost 46s
test 90 cost 51s
test 100 cost 57s
test 110 cost 63s
test 120 cost 68s
test 130 cost 74s
test 140 cost 80s
test 150 cost 86s
test 160 cost 92s
M14+2774 found
test 170 cost 99s
test 180 cost 105s
test 190 cost 110s
test 200 cost 116s
test 210 cost 122s
test 220 cost 128s
100秒左右可以找到M14的解。但是M15大概每测试10个素数需要35s,预计测试6K左右个素数可以找到结果,预计需要6小时左右,和nyy的计算结果花费时间基本一个数量级

nyy 发表于 2022-9-19 15:54:21

mathe 发表于 2022-9-19 15:16
试验了一下先筛选,在gmp概率素数测试,在我笔记本上,
test 10 cost 6s
test 20 cost 11s


这个是F15之前的第一个素数=F15-25354,
这个间隔是25354呀,你6k怎么可能找到结果?看错了吗?

nyy 发表于 2022-9-19 16:39:17

mathe 发表于 2022-9-19 15:16
试验了一下先筛选,在gmp概率素数测试,在我笔记本上,
test 10 cost 6s
test 20 cost 11s


你真聪明,居然用小素数筛选,我就比较笨了,我试了一下,用小素数筛选,确实快一些!

nyy 发表于 2022-9-19 16:53:26

这个是F15后面的三个连续素数。
(2^(2^15)+1)+118112
(2^(2^15)+1)+143904
(2^(2^15)+1)+145026

nyy 发表于 2022-9-19 16:56:52

再继续后面的两个素数:
(2^(2^15)+1)+160770
(2^(2^15)+1)+162872

nyy 发表于 2022-9-19 17:05:02

再继续后面的两个素数:
(2^(2^15)+1)+182004
(2^(2^15)+1)+187860
F15后面的全部素数(7个)如下:
(2^(2^15)+1)+118112
(2^(2^15)+1)+143904
(2^(2^15)+1)+145026
(2^(2^15)+1)+160770
(2^(2^15)+1)+162872
(2^(2^15)+1)+182004
(2^(2^15)+1)+187860

mathe 发表于 2022-9-20 07:07:09

#include <gmpxx.h>
#include <time.h>
#include <stdio.h>
#include <omp.h>

#define FM 15
#define TC 2
#define TRANGE 10000000
#define BLOCKSIZE 200000
char isp;
char bsize;

void initp()
{
        int i;
        for(i=2;i<TRANGE;i++)isp=1;
        for(i=2;i<=TRANGE/i;i++){
                if(isp){
                        int j;
                        for(j=i*i;j<TRANGE;j+=i)isp=0;
                }
        }
}

int pow2n(int n, int p)
{
        long r=1,m=2;
        int i;
        while(n>0){
                if(n&1){
                        r*=m;
                        r%=p;
                }
                m*=m;
                m%=p;
                n>>=1;
        }
        return (int)r;
}

void init()
{
        int i,p;
        int n=1<<FM;
        initp();
        for(i=1;i<BLOCKSIZE;i++)bsize=1;
        for(p=2;p<TRANGE;p++){
                if(!isp)continue;
                int r=pow2n(n,p);
                for(i=p-r;i<BLOCKSIZE;i+=p){
                        bsize=0;
                }
        }
        int c=0;
        for(i=1;i<BLOCKSIZE;i++){
                if(bsize)c++;
        }
        printf("Total %d cands left\n",c);
}

int gc;
int main()
{
        int i;
        time_t start = time(NULL);
        init();
        printf("Init done\n");fflush(stdout);
        mpz_class x=1;
        x<<=1<<FM; //2^(2^FM)
#pragma omp parallel for
        for(i=1;i<BLOCKSIZE;i++){
                if(!bsize)continue;
                mpz_class y=x+i;
                gc++;
                if(mpz_probab_prime_p(y.get_mpz_t(),TC)){
                        printf("M%d+%d\n",FM,i-1);
                        fflush(stdout);
                        fprintf(stderr,"M%d+%d found\n",FM,i-1);
                }
#if 0
                if(gc%7==0){
                        int diff = time(NULL)-start;
                        fprintf(stderr,"test %d cost %ds\n",gc,diff);
                }
#endif
        }
        return 0;
}

nyy 发表于 2022-9-20 09:08:37

今天争取搞出F16后面的第一个素数!仅仅只是争取,也许间距很大,但是争取搞出来!
8:29开始找,但是到现在还没找到。

nyy 发表于 2022-9-20 09:26:08

F16后面的两个素数:由于两个素数靠得比较近,所以我就一起贴上来。
(2^(2^16)+1)+44060
(2^(2^16)+1)+44180
找到9:23终于找到一个,耗时54分钟!

nyy 发表于 2022-9-20 13:51:07

F16前的第一个素数是
(2^(2^16)+1)-5628
页: 1 [2] 3
查看完整版本: 求F15后的第一个素数