我用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
我得到了输出
是
是
是
我无法理解不同的输出,因为代码逻辑保持不变