前段日子我也在做素數,下面是我的乙個總結,看到那個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仍未測試失敗,則認為 ...