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

时间:2015-10-26 05:50:18

标签: c++

我需要创建一个c ++程序,显示小于或等于输入值的所有素数。捕获是(我似乎无法做到的部分)是我必须使用两个函数来执行此操作,并且我无法在同一函数中输出值来确定它们是否为素数。下面是两个程序,第一个程序不起作用,这是在我意识到第二个程序不符合要求后通过反复试验。第二个程序有效,但不符合上述要求。提前谢谢你,这让我疯狂。

{{1}}

2 个答案:

答案 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

的末尾返回false
for (int n = 1; n < m; n++) {

在is_Prime函数中没有必要这样做,因为在外部函数中有while循环。