大素數高效演算法判斷

2021-07-03 17:21:52 字數 956 閱讀 9034

前段日子我也在做素數,下面是我的乙個總結,看到那個2秒搞定的,我還真想去看看

當數字小於1000000時,可以用簡單的判斷

int isprime(int n)  

但當數值在1000000到100000000時 

介紹一種方法 

prime=為事先做好的素數表 

如果需要判斷的數最大為100000000,則prime的最大元素為大於10000的最小素數即可 

//素數表生成法:  

int t[10010]=,prime[3000];//3000可能有點大,具體多少執行了,就知道了

int len;

void getprime(void)

} len=0;

for(i=2;i <10010;i++)

}

int isprime(long n)

return 1;

}

如果數值大於100000000時 

可以用miller-rabbin素數測試法,判斷是否為素數 

int miller_rabbin(long long n)  

return 1;

} long long modular_exp(long long a,long long b,long long c)//求a^b%c該函式受限

最普通的篩法:(演算法競賽必會)

#include#includeint main (void)}}

int k=0;

for(i=0; i<=n; i++)

}printf("\n~~~%d ",k);

return 0;

}

高效判斷素數方法

2012 8 2 18 07 孿生素數 所謂孿生素數指的是間隔為 2 的相鄰素數,它們之間的距離已經近得不能再近了。若n 6且n 1和n 1為孿生素數,那麼n一定是6的倍數。證明 n 1和n 1是素數 n 1和n 1是奇數 n是偶數,即n是2的倍數 假設n不是3的倍數,得 n 3x 1 或 n 3x...

演算法 高效求素數

質數又稱素數。指在乙個大於1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。1不是素數。乙個非素數可以由幾個素數因子相乘得到,這些因子一定小於這個數的開方,因此可通過這個性質求素數 void slow int n if flag cout cout 但這種演算法效率低,複雜度為o n s...

素數判斷演算法

bool isprime int n bool isprime int n int p max void prime int n return n odd 最後把主體和 剩下的 乘起來作為結果 演算法思路 對於n,從素數表中取出任意的素數對其進行費馬測試,如果取了很多個素數,n仍未測試失敗,則認為 ...