【发布时间】:2017-10-18 19:35:27
【问题描述】:
我的程序接受用户输入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;
}
}
我无法更改prime.cpp 的.h 文件
我只需要isPrime(n) 函数来处理main() 函数代码
用户输入 n,似乎没有使用数字 8。而是0
给我输出。 0 不是质数
而不是:n (8) 不是质数
【问题讨论】:
-
您确定您了解说明吗?我怀疑您应该使用
isPrime()来测试循环中的每个数字,而不是使用您自己的设置Prime的循环,而不是使用isPrime(n)。 -
@thesitg944 你刚刚删除了一个关于素数分解代码的问题。我有一个链接here,它解释了 4 种编码方式,从未优化到极度优化。它是如何工作的,主要是为什么你只需要在你的 for 循环中寻找 n 的 sqrt。