先上代码:
int prime_number(int n)
{
if (n <= 1)
return 0;
if (n <= 3)
return 1;
if (n % 2 == 0 || n % 3 == 0)
return 0;
for (int i = 5; i * i <= n; i += 6)
{
if (n % i == 0 || n % (i + 2) == 0)
return 0;
}
return 1;
}
质数,即大于等于2,然后其因数只有自己和1
所以:
1.
if (n <= 1)
return 0;
先踢小于等于1的数
2.
if (n <= 3)
return 1;
然后保留2,3
3.
if (n % 2 == 0 || n % 3 == 0)
return 0;
再踢 2 之外的偶数、3 之外的3的倍数,于是有了下图
可以得出>=5时,任何质数都能表示成6k±1
且一个数如果有大于它平方根的因数,那一定有对应的小于它平方根的因数,如24=6*4,所以枚举到 i * i 小于等于N
然后我们有了这个式子:
for (int i = 5; i * i <= n; i += 6)
这时,我们只需对6k±1的数进行筛选:(i为6k-1)
if (n % i == 0 || n % (i + 2) == 0)
return 0;
最后留下的都是质数,函数返回1:
return 1;
标题皮了一下,请别在意