我应该找到给定数字是否为素数,直到给出退出数为-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";
}
答案 0 :(得分:1)
在这一行
if (number%i == 1)
你很可能想知道“number
是否可被[{1}}整除”,相当于“i
除以number
的余数零强>”。因此你需要写
i
您的if (number%i == 0)
很奇怪。就目前而言,它在break;
- 块中不,因此您在第一次迭代中就会脱离循环。你应该用大括号括起if
的正文:
if
变量if (number%i == 1) {
count++;
break;
}
需要在每个素数测试之后(或之前)重置为零。或者更好:在for循环之前移动它的声明,以避免这种无意中重用旧值。
请将整个素数测试作为函数编写。这也不再需要count
变量以及count
,因为只要找到除数就可以break
。这反过来又完全消除了问题2.和3.
作为优化,您可以观察到只需要检查return
。这是正确的,因为如果更大的i*i > number
可以是除数,则除法的结果将小于i
,因此您已经在之前找到它。因此,请使用i
作为for-loop中的条件。
答案 1 :(得分:0)
我看到的第一个问题是count++
的想法。如果再次调用该程序,那么我们有旧计数。如果我们有旧计数,那么如果下一个数字是素数,它实际上告诉我们这个数字不是素数。类似地,如果我们继续经历这个计数并遇到一个非素数,那么我们计算为2.这是一个更大的问题,因为现在我们说非素数是素数。
顺便说一句,我有一个用C on github编写的函数来执行一些事情isprime
。
祝你好运!