试除法
ONE:
Code
IsPrime(a){
for(i=2;i*i<=a;i++)
if(a%i==0)
return a为合数;
return a为素数;
}
TWE:
Code
bool isPrime(int k) {
for (int i = 2 ; i < k ; i++)
if (k % i == 0) return false;
return true;
}
筛法
如果要判断一个区间内的数是否为素数,也可用筛法求素数。
算法思想:
1)将所有候选数2~n放入筛中;
2)找出筛中最小数P,P一定为素数。
3)宣布P为素数,并将P的所有倍数从筛中筛去;
4)重复2)至3)直到筛空.
其实,当P>sqrt(n)时筛中剩下的数就已经都是素数了。
ONE:
Code
//用数组isprime[MAXN]记录1-9999之间的数是否为素数;
//isprime[i]为1表示i为素数,否则为合数
#include<iostream>
using namespace std;
const int MAXN=10000;
int isprime[MAXN];
int i,j;
void initprime()
{
for (i=2; i <MAXN; i++)
isprime[i] = 1;
isprime[1] = 0;
for(i=2;i*i<MAXN;i++)
{
if(isprime[i]==1)
{
for(j=i+i;j<MAXN;j+=i)
isprime[j]=0;
}
}
}
TWO:
Code
#include <stdio.h>
#include <math.h>
char num[10000000];
int main()
{
memset(num,1,sizeof(num));
int i,j,k,sq;
int n=8000000;
sq=sqrt(n)+1;//若x是k的因子,则k/x也是k的因子,故判断到sqrt(n)即可
for(i=2; i<=sq ;i++)
if( num[i] )
for(j=2,k=n/i+1; j<k ;j++) num[i*j]=0;//0非素数,1是素数
return 0;
}