看到一个利用数字6来判断一个自然数是否是素数。一个自然数可以写成fx=6*k+b(b=0,1,2,3,4,5)的形式。排除自然数为2或者3的特殊情况,我们可以看到b=0,2,3,4的时候都与6有公约数,所以这时候一定不是素数。也就是一个自然数除以6的余数是1或者是5的时候才有可能是素数。之所以说有可能是因为比较大的数字可能是多个的(6k+1)或(6k+5)的组合的乘积。比如25=5*5=(6*0+5)*(6*0+5),35=(6*0+5)*(6*1+1),只要在这个自然数除以6的余数为1或者5的情况下,排除掉其可能是2个或者多个较小的数(除以6的余数为1或者5的较小的数)的乘积。就可以确定这个数是否是素数了。

 1 #include<iostream>
 2 #include<cmath>
 3 using namespace std;
 4 bool isprime(int num);
 5  
 6 int main()
 7 {
 8 for(int i=1;i<=100;i++)
 9 {
10     if(isprime(i)) cout<< i<<endl;
11 }
12 }
13 bool isprime(int num)
14 {
15     if(num<=1) return false; 
16     if(num==2 || num==3) return true;
17     if (num%6!=1&&num%6!=5) return false;
18     int tmp= sqrt(num);
19     for(int i=5;i<=tmp;i+=6)
20     {
21         if (num%i==0 || num%(i+2)==0) return false;
22     }
23     return true;
24 }