# 在 C++ 中检查一个数字是否为质数

## 在 C++ 中使用试除法检查数字是否为质数

``````#include <iostream>
#include <string>
#include <algorithm>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::numeric_limits;

bool isPrime(unsigned long long &n)
{
if (n <= 1)  return false;

for (uint i = 2; i < n; ++i)
if (n % i == 0)
return false;

return true;
}

template<typename T>
T &validateInput(T &val)
{
while (true) {
cout << "Enter the natural number: ";
if (cin >> val) {
break;
} else {
if (cin.eof())
exit(EXIT_SUCCESS);

cout << "Enter a valid natural number!\n";
cin.clear();
cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
}
}
return val;
}

int main(){
unsigned long long num;

while (true) {
validateInput(num);

isPrime(num) ? cout << "Is Prime\n" : cout << "Is Not Prime\n";
}

exit(EXIT_SUCCESS);
}
``````

## C++ 中使用相对优化的方法来检查数字是否为质数

``````#include <iostream>
#include <iostream>
#include <string>
#include <algorithm>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::numeric_limits;

template<typename T>
T &validateInput(T &val)
{
while (true) {
cout << "Enter the natural number: ";
if (cin >> val) {
break;
} else {
if (cin.eof())
exit(EXIT_SUCCESS);

cout << "Enter a valid natural number!\n";
cin.clear();
cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
}
}
return val;
}

bool isPrime(unsigned long long &n)
{
if (n <= 3)
return n > 1;

if (n % 2 == 0 || n % 3 == 0)
return false;

for (int i = 5; i * i <= n; i += 6)
if (n % i == 0 || n % (i + 2) == 0)
return false;

return true;
}

int main(){
unsigned long long num;

while (true) {
validateInput(num);

isPrime(num) ? cout << "Is Prime\n" : cout << "Is Not Prime\n";
}

exit(EXIT_SUCCESS);
}
``````

## 相关文章 - C++ Int

• C++ 中的 INT_MAX 和 INT_MIN 宏表达式
• 如何在 C++ 中把字符串转换为 Int