0、如果是偶数(大于二的),就直接判断不是素数;
1、下面的模板,名字叫什么我不知道,代码百度的,可以过题;
bool Isprime(__int64 x){
for(int i=2;i*i<=x;i++)
if(x%i==0) return 0;
return 1;
}
2、筛选法求出素数,打表出来就可以,最大到1000000应该可以吧,我做的题目都是这样。
3、网上搜到个人的说是:
/**
拉宾-米勒素性测试的算法
判断一个数p是否为素数(p首先得为大于等于2的正整数才有可能为素数),首先判奇偶,若
为偶数只有2为素数,若为奇数(这里可以考虑去掉 3甚至5的倍数),则先求出d。对于每一
个底a,让d不断乘以2直到为(p-1)/2,在此过程中(包括原本的d与d=(p-1)/2时的情况),
设t为 a的d次方模p的余数,(1)当t=-1时跳出,声明p有可能为素数(2)当t=1时,若d为
奇数,跳出声明p有可能为素数,否则跳出声明p必为合数 (3)当d=(p-1)/2时跳出,声明p
必为合数。
要判断n是否为素数,对于一定范围内的n,只要以一定范围内a为底就可以保证这是一个确定
性算法了。下面详细:
if n < 1,373,653, it is enough to test a = 2 and 3.
if n < 9,080,191, it is enough to test a = 31 and 73.
if n < 4,759,123,141, it is enough to test a = 2, 7, and 61.
if n < 2,152,302,898,747, it is enough to test a = 2, 3, 5, 7, and 11.
代码好长好长,我就懒得去看了,直接用第一个不就很好。。。
4、
bool Isprime(__int64 x){
if(x>2&&x%2==0) return 0;
for(int i=3;i<=sqrt(double(x));i+=2)
if(x%i==0) return 0;
return 1;
}
待更新;