使用两个函数在c++中显示小于或等于输入的素数
Displaying prime numbers less than or equal to input in c++ using two functions
我需要创建一个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;
}
解决方案二(更好):
在函数中加入另一个变量,例如:a std::vector<int> v;
,而不是打印找到的素数,而是将它们添加到具有v.push_back(n);
的向量中。返回整个向量(在检查了所有数字之后)。在main中,只打印vector中包含的每个数字。这使您能够在函数中使用更好的算法(因为一次调用检查所有数字),如筛方法,以使一切更快。
在你的第二次尝试(标记为第一次)中有相当多的错误。
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循环。
相关文章:
- 如何在Qt 4.8中阻止/忽略/丢弃早于特定超时的用户输入事件
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- 多个输入输入 for 循环
- 当我输入一个字母时,cin 输入(输入是一个 int),而不是打印错误一次,它打印正确一次,然后在循环的其余部分打印 i
- 我的代码仅适用于一个输入.请指教
- Vigenere密码的C++功能有时才起作用(适用于某些输入,跳过其他输入的班次)
- 将输入输入到 c++ 数组时出现运行时错误
- 它不会打印出基于用户输入 c++ 输入的任务
- 将用户输入验证为整数:用户必须两次输入输入
- 是否可以将输入输入作为参数
- C 必须将输入输入两次
- 依赖于文件输入的c++模板
- C++使变量类型依赖于用户输入
- 在C++程序运行时输入输入值 (./filename.out)
- 即使我做了>> cin ,也不让我输入输入
- 在没有用户输入输入的情况下中断while循环
- visual将c++ Gui中的输入输入到另一个c++程序中
- 在C中输入输入后,输出窗口关闭
- 将Python的输入输入到c++程序中
- 带空格的输入输入所有循环