我需要创建一个c ++程序,显示小于或等于输入值的所有素数。捕获是(我似乎无法做到的部分)是我必须使用两个函数来执行此操作,并且我无法在同一函数中输出值来确定它们是否为素数。下面是两个程序,第一个程序不起作用,这是在我意识到第二个程序不符合要求后通过反复试验。第二个程序有效,但不符合上述要求。提前谢谢你,这让我疯狂。
{{1}}
答案 0 :(得分:1)
所以,问题是以下函数会打印数字本身。
bool is_Prime(int m) {
for (int n = 1; n < m; n++) {
bool prime = true;
for (int x = 2; x*x <= n; x++) {
if (n % x == 0) {
prime = false;
}
}
if (prime)
cout << n << " " << endl;
}
return 0;
}
解决方案一:
修改函数,使其只检查一个给定的数字(如果它是素数),并且在main中,从1到最大数字进行循环,为每个数字调用is_prime,如果函数返回true,则打印数字。
bool is_Prime(int p) {
for (int x = 2; x*x <= p; x++) {
if (p % x == 0) {
return false;
}
}
return true;
}
...
//in main:
for(int p = 1; p < m; p++)
{
if(is_prime(p))
cout << p << endl;
}
解决方案二(更好):
在函数中创建另一个变量,例如。 std::vector<int> v;
,而不是打印找到的素数,将它们添加到v.push_back(n);
的向量中。返回整个向量(检查所有数字后)。在main中,只需打印向量中包含的每个数字。这使您可以在函数中使用更好的算法(因为一个调用检查所有数字),如筛选方法,以使一切更快。
答案 1 :(得分:0)
第二次尝试时出现了很多错误(标记为第一次)。
is_Prime(m);
这是不断检查一个数字,而不是所有小于m的数字,用n代替m。
if (true) {
这将始终执行。存储is_Prime的返回值,或直接在if语句中调用它。
if(prime = true)
这会将prime设置为true,然后测试prime。你想要==。
你不会在is_Prime
的末尾返回falsefor (int n = 1; n < m; n++) {
在is_Prime函数中没有必要这样做,因为在外部函数中有while循环。