如何修复素数生成程序,从生成复合数开始 我试着用C++编写一个程序,计算素数,并把它们存储在一个数组中。考虑这是我的第三个代码。

如何修复素数生成程序,从生成复合数开始 我试着用C++编写一个程序,计算素数,并把它们存储在一个数组中。考虑这是我的第三个代码。,c++,primes,C++,Primes,我遇到的问题是,当我得到素数时,我也得到了复合数,特别是5和7的倍数(至少在30的极限之前)。我知道,代码可能会很糟糕,但考虑到我在编码和素数方面的有限经验,这是我能想到的 这是我写的: #include <iostream> int j; int i = 3; int prime[30]; int main() { for (i; i < 30; i+=2) { for (j =i; j>i*i; j--) {

我遇到的问题是,当我得到素数时,我也得到了复合数,特别是5和7的倍数(至少在30的极限之前)。我知道,代码可能会很糟糕,但考虑到我在编码和素数方面的有限经验,这是我能想到的

这是我写的:

#include <iostream>
int j;
int i = 3;
int prime[30];

int main()
{
    for (i; i < 30; i+=2)
    {
        for (j =i; j>i*i; j--)
        {
            if ((i % j) == 0)
            {
                continue;
            }
        }
        prime[i] = i;
        std::cout << prime[i] << std::endl;
    }
}
#包括
int j;
int i=3;
int素数[30];
int main()
{
对于(i;i<30;i+=2)
{
对于(j=i;j>i*i;j--)
{
如果((i%j)==0)
{
继续;
}
}
素数[i]=i;

std::cout您的内部循环只需要使用您迄今为止遇到的素数测试可除性。(例如,如果您已经使用3测试了可除性,那么使用9测试可除性没有意义)

intmain()
{
int j;
int i=3;
int素数[30];
int primecount=0;
素数[primecount++]=2;//硬编码2,它是唯一的偶数
对于(i=3;i<30;i+=2)
{
bool isPrime=true;
对于(j=0;jcontinue
只从内部循环中断,但您打算继续使用外部循环。最小的解决方法是使用可怕的
转到
,在这里完全合适

而且
环路的内部
规格也完全错误:

#include <iostream>

int prime[30];

int main()
{
    int i, j;
    std::cout << 2 << " ";     // the first prime is 2
    for (i=3; i < 30; i+=2)
    {
        for // all wrong: (j =i; j>i*i; j--)
            (j = 2; j*j <= i; ++j)    // or even, (j = 3; j*j <= i; j += 2)
        {
            if ((i % j) == 0)
            {
                prime[i] = 0;  // initialize the non-primes as well!
                goto L1;       // continue the outer loop
            }
        }
        // the inner loop finished normally
        prime[i] = i;  
        std::cout << i << " ";

        L1: ;
    }
}
#包括
int素数[30];
int main()
{
int i,j;

std::cout
j>=i*i
而不是
j>i*i
你忘记打印
2
;)继续
只跳过(j=i;j>i*i;j-)的
循环的(不存在的)其他代码。@CoderCharmander尝试将'prime[i]=i;'放在'for(j=i;j>i*i;j-)中然而,作为输出,我得到的是0。同样,测试23除以5、7、11、13和19的整除性也没有意义。(或者,如果有人愿意,但这完全是另一回事。)
#include <iostream>

int prime[30];

int main()
{
    int i, j;
    std::cout << 2 << " ";     // the first prime is 2
    for (i=3; i < 30; i+=2)
    {
        for // all wrong: (j =i; j>i*i; j--)
            (j = 2; j*j <= i; ++j)    // or even, (j = 3; j*j <= i; j += 2)
        {
            if ((i % j) == 0)
            {
                prime[i] = 0;  // initialize the non-primes as well!
                goto L1;       // continue the outer loop
            }
        }
        // the inner loop finished normally
        prime[i] = i;  
        std::cout << i << " ";

        L1: ;
    }
}