1至100之间的质数列表

时间:2020-06-25 09:27:51

标签: c++

我想找到素数列表,我尝试了此代码,但没有显示任何内容:

#include <iostream>

using namespace std;

int main()

{

    int n, i;
    std::cout << "Liste des nombres premiers : " << std::endl;

    for (n = 1; n < 100; n++) {

        for (i = 2; i < n; i++) {

            if (n % i == 0)
                std::cout << n << " ";
        }
    }

    return 0;
}

2 个答案:

答案 0 :(得分:2)

我根本不喜欢您的代码。尝试执行以下操作:创建一个告诉您数字是否为质数的函数,然后使用for循环遍历从1到100的所有数字,并检查该函数是否为质数。 这是一个易于记忆的功能(用于自然数):

> | locations                                              |
> | :----------------------------------------------------- |
> | Location A,Location B,Location C,Location A,Location B |

如果数字为素数,则此函数返回1,否则为0。 这个想法是这样的:

如果n为0或1,则不是素数。

如果n为2,则为质数。

如果n是2的倍数,但不是2,则不是素数。

然后,您必须检查n是否有除数,直到获得n的平方根(i * i <= n)

答案 1 :(得分:0)

更正程序错误:

  1. n的值初始化为2
  2. i等于n时打印,而不在n % i0时打印。应该是n % i == 0然后中断。
  3. i < n更改为i <= n

尝试第一种方法(使用sqrt()):

#include <iostream>
#include <cmath>

int main(void)
{
    for (int i = 2; i < 100; i++) {
        if (i == 2 || i == 3) { // if number is 2 or 3, then prints it
            std::cout << i << ' ';
        }
        for (int j = 2; j * j <= i; j++)
        {
            if (i % j == 0) break;
            else if (j + 1 > sqrt(i)) std::cout << i << ' ';
        }
    }

    return 0;
}

替代方法:

#include <iostream>

int main(void)
{
    for (int n = 2; n < 100; n++)
        for (int i = 2; i <= n; i++)
            if (i == n) std::cout << i << ' ';
            else if (n % i == 0) break;
    
    return 0;
}