Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ I';我对判断一个数字是否是素数的代码有问题_C++ - Fatal编程技术网

C++ I';我对判断一个数字是否是素数的代码有问题

C++ I';我对判断一个数字是否是素数的代码有问题,c++,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

我要找出一个给定的数是素数还是素数,直到给出了一个-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";
}
#包括
#包括
使用名称空间std;
int main()
{
整数,计数;
计数=0;
库特
  • 在这一行

    if (number%i == 1)
    
    您很可能想知道“如果
    number
    可被
    i
    整除”,这相当于“number
  • i
    整除的剩余部分是”。因此您需要编写

    if (number%i == 0)
    
  • 你的
    break;
    很奇怪。就目前的情况而言,它不在
    if
    -块中,因此你在第一次迭代中就打破了循环。你应该用大括号括住
    if
    的主体:

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

  • 请将整个素数测试作为一个函数来编写。这也就不需要使用
    count
    变量和
    break
    ,因为只要找到一个除数,就可以简单地
    返回
    。这样就完全消除了问题2.和问题3.了


  • 作为一种优化,您可以观察到您只需要检查
    i*i>number
    。这是正确的,因为如果一个更大的
    i
    可以是一个除数,那么除法的结果将小于
    i
    ,因此您早就已经找到了。因此使用
    i*i我看到的第一个问题是
    co的概念unt++
    。如果程序被再次调用,那么我们就有了旧计数。如果我们有旧计数,那么如果下一个数字是素数,它实际上告诉我们这个数字不是素数。类似地,如果我们继续进行这个计数并遇到一个非素数,那么我们就把计数设为2。这是一个更大的问题,因为现在我们是一个我们说非素数就是素数

    顺便说一句,我有一个用C编写的函数,它可以做一些事情
    isprime


    祝你好运!

    你有没有尝试过使用调试器来逐步调试你的代码?完全脱离主题,但是你的
    C
    代码中那些结尾的
    /**/
    注释是可怕的,任何必须维护你的代码的人都会永远恨你。@blastfull最近有人告诉我这一点……我想这是我的一个老习惯保持代码的条理化。做类似事情的好方法是什么,但没有愚蠢的方框?我愚蠢的建议是完全忘记以任何方式填充行。我认为这并不能提高可读性,保持同步是一个烦琐的噩梦(除非您的文本编辑器自动执行此操作,但对于使用不同编辑器的维护较差的程序员又如何呢),它会使您的源文件变得臃肿。哦,还有一个实际问题是它会阻止我对几行代码进行注释。当我插入
    /*
    开始一个块时,您的
    /**/
    将结束该块并使我非常伤心。@blastburne我会牢记这一点。实际上,我将您的注释展示给了一些同事,他们都笑了对他们说同样的话。为了摆脱文本编辑器的问题,我倾向于使用空格而不是制表符(同样是坏习惯)。不过,到目前为止,我还是要打破这个习惯:)