我的程序接受用户输入int n
,并打印出第一个n
质数。这按预期工作
例如。如果用户输入8
为n。该程序将打印:
2 3 5 7 11 13 17 19
我的问题是添加函数
isPrime(n)
(不允许更改)这是我尝试过的,但我只是得到输出:
2 3 5 7 11 13 17 19 0 is not a prime number,
什么时候应该读
2 3 5 7 11 13 17 19 8
不是素数#include "prime.h"
#include <iostream>
int main()
{
int n;
std::cout << "Enter a natural number: ";
std::cin >> n;
for (int i = 2; n > 0; ++i)
{
bool Prime = true;
for (int j = 2; j < i; ++j)
{
if (i % j == 0)
{
Prime = false;
break;
}
}
if (Prime)
{
--n;
std::cout << i << " ";
}
}
if (isPrime(n))
{
std::cout << n << " is a prime number." << std::endl;
}
else
{
std::cout << n << " is not a prime number." << std::endl;
}
system("pause");
}
prime.h:
#ifndef PRIME_H_RBH300111
#define PRIME_H_RBH300111
bool isPrime(int);
#endif
#pragma once
isPrime(int)
的定义prime.cpp:
#include <cmath>
#include "prime.h"
bool isPrime(int n)
{
if (n < 2)
{
return false;
}
else if (n == 2)
{
return true;
}
else if ((n % 2) == 0)
{
return false;
}
}
我无法更改
.h
的prime.cpp
文件我只需要
isPrime(n)
函数来处理main()
函数代码用户输入n似乎没有采用
8
的数字。但改为0
给我输出。 0
不是素数而不是:
n (8)
不是质数 最佳答案
您正在循环中递减n
。在循环退出时,n
的值为0
。
您可以通过以下方法解决问题:
n
的副本,并在循环退出后重置n
的值。 这是第二种方法:
int copyN = n;
for (int i = 2; n > 0; ++i)
{
...
}
n = copyN;
if (isPrime(n))
...