C对于几乎相同的代码表现不同

时间:2018-10-14 07:28:25

标签: c primes

我用C语言创建了一个程序来查找一个整数,该整数是两个半素数之和。相乘的素数应该不同。 (我已经在输出中描绘了)。这是代码

#include<stdio.h>

main()
{
    int i, j, k, n=0, l=0, c, d, x, y, t, prime[200], a[200], count=0;

    repeat:
    scanf("%d", &t);
    if(t>1 && t<200)
    {
        goto repeat;
    }

    for(i=0; i<t; i++)
    {
        repeat0:
        scanf("%d", &a[i]);
        if(a[i]<1 && a[i]>200)
            goto repeat0;
    }

    for(i=0; i<t; i++)
    {
        for(j=2; j<a[i]; j++)
        {
            for(k=2; k<j; k++)
            {
                if(j%k==0)
                {
                    n++;
                }
            }
            if(n==0)
            {
                prime[l]=j;
                l++;
            }
            n=0;
        }

        for(c=0; c<l; c++)
        {
            for(d=0; d<l; d++)
            {
                for(x=0; x<l; x++)
                {
                    for(y=0; y<l; y++)
                    {
                        if(a[i]==(prime[c]*prime[d])+(prime[x]*prime[y]) && prime[c]!=prime[d] && prime[x]!=prime[y])
                        count++;
                    }
                }
            }
        }

        if(count>0)
            printf("YES\n");
        else printf("NO\n");
        count=0;
    }
}
  

现在,我提供输入内容

     

3

     

30

     

45

     

60

     

输出为

     

     

// 15 + 15 = 3 * 5(这两个no必须相同,如   半素数,即3和5,对于15和15则不是必需)+ 3 * 5

     

     

// 5 * 7 + 2 * 5

     

     

如果我现在发布

     

if(a [i] ==(prime [c] * prime [d])+(prime [x] * prime [y])&& c!= d && x!= y)

     

代替

     

if(a [i] ==(素数[c] *素数[d])+(素数[x] *素数[y])&&素数[c]!=素数[d]   && prime [x]!= prime [y])

     

并输入

     

3

     

30

     

45

     

62

     

我得到了输出

     

     

     

我无法理解不同的输出,因为代码逻辑保持不变

0 个答案:

没有答案