1.简单暴力的方法
判断[2,n-1]区间有没有约数即可
int isPrime(int n) {
int i;
for (i = 2; i < n; ++i) {
if (n % i == 0) return 0;
}
return 1;
}
2.用sqrt(n)
约数都在sqrt(n)这个数的两边对应出现,所以若sqrt(n)的右边没有,则左边也没有
int isPrime(long long n) {
long long i;
for (i = 2; i * i <= n; ++i) {
if (n % i == 0) return 0;
}
return 1;
}
eg:杭电判断素数1012
#include <iostream>
#include <string.h>
#include <algorithm>
#include <cstdio>
#include <iomanip>
#include <math.h>
using namespace std;
int main()
{
int x,y,i,j;
while(scanf("%d%d",&x,&y)!=EOF)
{
if(x==0&&y==0)
break;
int flag=0;
for(i=x; i<=y; i++)
{
int z=i*i+i+41;
for(j=2; j<sqrt(z); j++) //要用sqrt(n),不然会超时
{
flag=1;
break;
}
}
if(flag==1)
printf("OK\n");
else
printf("Sorry\n");
}
return 0;
}