gpt4 book ai didi

c++ - 使用两个函数显示小于或等于c++中输入的素数

转载 作者:行者123 更新时间:2023-11-28 06:00:39 25 4
gpt4 key购买 nike

我需要创建一个 C++ 程序来显示所有小于或等于输入值的素数。问题是(我似乎做不到的部分)是我必须使用两个函数来做到这一点,而且我不能在确定它们是否为质数的同一函数内输出值。下面是两个程序,第一个程序不行,这是我在发现第二个程序不符合要求后反复试验得到的。第二个程序有效,但不满足上述要求。提前谢谢你,这让我发疯了。

First:



bool is_Prime(int);

#include <iostream>
using namespace std;
int main() {
int m, n;
n = 2;
cout << "Your input: ";
cin >> m;
cout << "The prime numbers less than or equal to " << m << " are:" << endl;

while ( n <= m)
{
is_Prime(m);

if (true) {
cout << n << endl;
}
n++;
}

return 0;
}

bool is_Prime(int m) {
for (int n = 1; n < m; n++) {
bool prime = true;

for (int x = 2; x*x <= m; x++) {
if (m % x == 0) {
prime = false;
}
}

if (prime = true)
{
return true;
}
}
}


Second:


bool is_Prime(int m);

#include <iostream>
using namespace std;
int main() {
int m;

cout << "Your input: ";
cin >> m;

cout << "The prime numbers less than or equal to " << m << " are:" << endl;
is_Prime(m);

return 0;
}

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;
}

最佳答案

所以,问题是下面的函数打印了数字本身。

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); 的 vector 中.返回整个 vector (检查所有数字后)。在 main 中,只需打印 vector 中包含的每个数字。这使您能够在函数中使用更好的算法(因为一次调用会检查所有数字),例如筛选方法,从而使一切变得更快。

关于c++ - 使用两个函数显示小于或等于c++中输入的素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33339220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com