用户输入N,找到a和b共同素数的所有对,其中a <n&=“”b <n =“”

时间:2017-11-07 21:31:31

标签: c++

=“”
 #include <iostream>
using namespace std;
void gcd(){
    int a,b,hcf;
    for (int i = 1; i <=  b; ++i) {
        if (a % i == 0 && b % i ==0) {
            hcf = i;
        }
    }
}
void pirm(){
    int a,b,n,hcf;
for (int a=1;a<n;a++){
    for (int b=1;b<n;b++){
gcd();
if (hcf==1) {
        cout << a << " and " << b << endl;
}
}
}
}
int main(){
    int n,a,b,i,hcf;
cout << "Enter a natural n, less than 100" << endl;
cin >> n;
if (n>=1 && n<100){
pirm();
}
else
    cout << "You didn't enter a natural number" <<endl;
}


当我运行它并输入一个数字时,它什么也没做。任务如下: 用户输入一个小于100的自然N.找到并输出所有&lt; 100。

正如您可以从代码中看出的那样,我是C ++的完整新手。只是想知道为什么节目&#34;停止&#34;或者我把代码搞砸了。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

这里有很多问题。

首先,直接回答你的问题:你的程序永远不会打印,因为它永远不会执行print语句。如果输入自然数,但hcf永远不等于1,则永远不会打印任何内容。

现在问题变成为什么hcf永远不会是1?这就是我们开始遇到更多代码问题的地方。主要的误解似乎与范围有关。如果在函数内声明变量,它们在函数的“范围”内 - 函数可以使用它们,函数内的任何范围都可以使用它们(例如循环和条件),但是没有外部范围可以使用它们。您多次声明abhcf,但您只能在gcd()中使用它们。这不仅是不必要的,而且至关重要的是,它们是不同的变量。您更改hcf范围内的gcd(),但hcf中的pirm()保持不变!

有很多方法可以做你想做的事情。与您已有的最接近的是让gcd()通过引用获取参数。如果您将gcd()的声明更改为void gcd(int a, int b, int &hcf),并且在函数的第一行重新声明这些变量,那么您就可以修改hcf以某种方式即使功能超出范围也会坚持下去。然后,您需要将第15行的通话更改为gcd(a,b,hcf);

您的算法也可以改进,但我相信它仍然有效。如果您对找到gcd的更规范的方式感兴趣,请尝试查看Euclid's algorithm

答案 1 :(得分:0)

您应该学习如何将参数传递给函数。为您更正了代码,似乎正在运行:

#include <iostream>

void gcd(int &hcf, int a, int b) 
{
    for (int i = 1; i <= b; ++i) 
    {
        if (a % i == 0 && b % i == 0) 
        {
            hcf = i;
        }
    }
}

void pirm(int n) 
{
    int hcf;

    for (int a = 1; a<n; a++) 
    {
        for (int b = 1; b<n; b++) 
        {
            gcd(hcf, a, b);
            if (hcf == 1) 
            {
                std::cout << a << " and " << b << std::endl;
            }
        }
    }
}

int main()
{

    int n;

    std::cout << "Enter a natural n, less than 100" << std::endl;
    std::cin >> n;
    if (n >= 1 && n<100) 
    {
        pirm(n);
    }
    else
        std::cout << "You didn't enter a natural number" << std::endl;

    system("pause");

    return 0;
}