0

我试图在 C++ 中找出如何找到一个范围内的所有素数(现在使用 100)

我不关心性能,我从 C++ 开始,并试图从我的书中理解这个程序练习。我有我正在尝试在下面使用的程序,但它一直返回错误。有任何想法吗?我已经阅读了几乎所有 googles/bing 的帮助以及堆栈溢出。我可以为它编写代码来输入数字;只是没有遍历所有数字

关于我做错了什么的任何想法?

#include <iostream>

using namespace std;

bool isPrime(long n);
int main() 
{
    int i;
    //some vars
    char emptyVar;

    //first loop (to increment the number)
    for (i = 0; i <= 100; i++)
    {
        //checking all numbers below 100

        if (isPrime(i) == true)
        {
            //is true
            cout << i << ", ";
        }
        else if (isPrime(i) == false)
        {
            //is false
            cout <<"false , ";
        }
    }
    cin >> emptyVar;
}

bool isPrime(long n)
{
    long i =0;
    //checks to see if the number is a prime
    for (i = 2; i < n; i++) // sqrt is the highest possible factor
    {
        if ( n % i == 0) // when dividing numbers there is no remainder if the numbers are both factors
        {
            // is a factor and not prime
            return false;
        }
        else if (n % i != 0 && i >= 100)
        {
            //is not a factor
            return true;
        }
    }
}
4

3 回答 3

2

该函数isPrime没有return针对每个可能的执行路径的语句。例如,做什么,什么isPrime时候n == 2

这是for循环的工作原理(在伪代码中)。一般语法是

for (initialiazion; condition; increment) {
   body;
}
rest;

这可以翻译成一个while循环:

initialiazion;
while (condition) {
  body;
  increment;
}
rest;

特别是,在, before执行condition之后立即检查。intializationbody

我怀疑,你认为for循环是这样工作的:

initialiazion;
do {
  body;
  increment;
} while (condition);
rest;

即在第一个之后increment检查条件。但事实并非如此。

于 2013-02-24T20:14:49.120 回答
1

如果它不是 EVERY i 的一个因素,而不仅仅是它遇到的第一个因素,它应该返回 true。

bool isPrime(long n)
{
    long i =0;
    //checks to see if the number is a prime
    for (i = 2; i < n ; i++) // sqrt is the highest possible factor
    {
        if ( n % i == 0) // when dividing numbers there is no remainder if the numbers are both factors
        {
            // is a factor and not prime
            return false;
        }
    }
    return true; 

}

同样在您的情况下,搜索超出 i > n/2 是没有意义的。当然,您应该看一下文献,它们是非常强大的素性测试算法。

于 2013-02-24T20:16:57.700 回答
0

你的isPrime函数不正确。它应该检查所有数字,然后才return true;

并且永远不会在您的输入上调用此块:

    else if (n % i != 0 && i >= 100)
    {
        //is not a factor
        return true;
    }
于 2013-02-24T20:18:11.197 回答