C++判断素数/质数
定义:
一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数(又称素数);否则称为合数(规定1既不是质数也不是合数)。
特点:它总是等于 6x-1 或者 6x+1,其中 x 是大于等于1的自然数。
首先 6x 肯定不是质数,因为它能被 2x3 整除;
其次 6x+2 肯定也不是质数,因为它还能被2整除;
依次类推,6x+3 肯定能被 3 整除;6x+4 肯定能被 2 整除。
那么,就只有 6x+1 和 6x+5 (即等同于6x-1) 可能是质数了。
所以循环的步长可以设为 6,然后每次只判断 6 两侧的数即可。
#include <iostream>
#include <cmath>
using namespace std;
bool isprime(int num)
{
if (num <= 3)
{
return num > 1;
}
if (num % 6 != 1 && num % 6 != 5)
{
return false;
}
for (int i = 5; i <= sqrt(num); i += 6)
{
if (num % i == 0 || num % (i + 2) == 0)
{
return false;
}
}
return true;
}
int main()
{
int m;
cin >> m;
for (int i = 2; i <= m; i++)
{
if (isprime(i))
cout << i << " ";
}
return 0;
}