我的程序接受用户输入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
的{{1}}文件
我只需要prime.cpp
函数来处理isPrime(n)
函数代码
用户输入n,似乎没有采用数字main()
。而是8
给我输出。 0
不是素数
而不是:0
不是素数
答案 0 :(得分:1)
你在循环中递减n
。在循环退出时,n
的值为0
。
您可以通过以下方式解决问题:
n
的副本并重置n
的值。这是第二种方法:
int copyN = n;
for (int i = 2; n > 0; ++i)
{
...
}
n = copyN;
if (isPrime(n))
...
答案 1 :(得分:0)
你在for循环中递减n。 for循环具有条件&n;&gt; 0&#39;,所以你知道n isn&t; t&gt;循环结束时为0。您可以将n的值保存在另一个变量中(即&#34; int nOrig = n;&#34;)并将其用于主要测试,或者在循环中使用其他变量。