用简单循环解决的素数问题
素数探求
试商法
//用2~sqrt(x)之间的整数去试商 int IsPrime(int x) { int i,squareroot; if(x==1) return 0; squareroot=(int)sqrt(x); int i; for(i=2;i<=squareroot;i++) { if(x%i==0) return 0; } return 1; }
判断完数
试商法
int IsPnumber(int x) { int i,sum=0; for(i=1;i<=(x/2);i++) { if(x&i==0) sum+=i; } return x==sum?1:0; } //优化速度 int IsPnumber(int x) { int i,sum=0; int k=(int)sqrt(x); for(i=1;i<=k;i++) { if(x&i==0) { sum=sum+i+x/i; } } return x==sum?1:0; }
验证歌德巴赫猜想
任何一个大于等于6的偶数总能表示为两个素数之和
试商法
函数不能嵌套定义,但可以嵌套调用
引用标志变量flag 标记解是否找到的状态 一般情况下flag为0或1 flag注意要进行初始化
回文素数
- 从10试到n-1
- 分离个位,十位,百位
- 若(t==m)&& IsPrime(m)则为回文素数
- 2位与3位运算不同
孪生素数 相差为2的两个素数
IsPrime(i) && IsPrime(i+2)
加速:若min为偶数,则min++,宁且i+=2;(测试所有奇数)
使用front记录前一个素数
梅森素数
注意:pow()函数返回值为double,且调用较慢
最好自己写一个乘方函数