gpt4 book ai didi

c++ - 我在使用代码确定数字是否为质数时遇到问题

转载 作者:行者123 更新时间:2023-11-28 06:37:48 25 4
gpt4 key购买 nike

我应该找出给定数字是否为素数,直到给出退出数字 -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";
}

最佳答案

  1. 在这一行

    if (number%i == 1)

    您很可能想知道“如果 number 能被 i 整除”,这等同于“number 除以 i 的余数是”。因此你需要写

    if (number%i == 0)
  2. 你的 break;很奇怪。目前,它if内-block,因此您在第一次迭代中就跳出了循环。您应该附上您的 if 的正文带花括号:

    if (number%i == 1) {
    count++;
    break;
    }
  3. 变量count需要在每次质数测试之后(或之前)重置为零。或者更好:将其声明移到 for 循环之前,以避免这样的旧值的意外重用

  4. 请将整个素数测试写成一个函数。这也减少了对 count 的需求变量以及 break , 你可以简单地 return一旦找到除数。这反过来会完全消除问题 2. 和 3.。

  5. 作为一种优化,您可以观察到您只需要检查直到i*i > number。 .这是真的,因为如果一个更大的 i可以是除数,除法的结果小于i ,因此您早就找到了它。所以使用 i*i <= number作为 for 循环中的条件。

关于c++ - 我在使用代码确定数字是否为质数时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26519996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com