我遇到代码问题,以确定数字是否为素数

时间:2014-10-23 01:44:03

标签: c++

我应该找到给定数字是否为素数,直到给出退出数为-1。当我输入一个数字时,它将作为所有素数或所有负数返回。

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
int number, count;

count = 0;

cout << "Enter positive numbers. Enter -1 to quit." << endl;
cout << "Enter number: ";
cin >> number;

while (number != -1)
{
    for (int i = 2; i <= number-1; i++)
    {
        if (number%i == 1)
            count++;
            break;
    }
    if (count == 1)
        cout << number << " is not prime number" << endl;
    else
        cout << number << " is prime number" << endl;

    cout << "Enter number: ";
    cin >> number;
}
cout << "Program is terminated";
}

2 个答案:

答案 0 :(得分:1)

  1. 在这一行

    if (number%i == 1)
    

    你很可能想知道“number是否可被[{1}}整除”,相当于“i除以number的余数”。因此你需要写

    i
  2. 您的if (number%i == 0) 很奇怪。就目前而言,它在break; - 块中,因此您在第一次迭代中就会脱离循环。你应该用大括号括起if的正文:

    if
  3. 变量if (number%i == 1) { count++; break; } 需要在每个素数测试之后(或之前)重置为零。或者更好:在for循环之前移动它的声明,以避免这种无意中重用旧值

  4. 请将整个素数测试作为函数编写。这也不再需要count变量以及count,因为只要找到除数就可以break。这反过来又完全消除了问题2.和3.

  5. 作为优化,您可以观察到只需要检查return。这是正确的,因为如果更大的i*i > number可以是除数,则除法的结果将小于i ,因此您已经在之前找到它。因此,请使用i作为for-loop中的条件。

答案 1 :(得分:0)

我看到的第一个问题是count++的想法。如果再次调用该程序,那么我们有旧计数。如果我们有旧计数,那么如果下一个数字是素数,它实际上告诉我们这个数字不是素数。类似地,如果我们继续经历这个计数并遇到一个非素数,那么我们计算为2.这是一个更大的问题,因为现在我们说非素数是素数。

顺便说一句,我有一个用C on github编写的函数来执行一些事情isprime

祝你好运!