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;
}
posted @ 2020-07-16 19:17  予之路  阅读(1393)  评论(0编辑  收藏  举报