cat_lover1 @ 2023-04-21 17:55:16
AC Code:
_Bool prime[20000];n,a,b,i,j;
main(){
memset(prime,1,sizeof prime);
for(i=2;i<20000;++i){
for(j=2;j*j<=i;++j)if(!(i%j))prime[i]=0;
}
//for(i=2;i<20000;++i)(prime[i])&&(printf("%d ",i));putchar('\n');
scanf("%d",&n);
for(i=2;i<20000;++i)
for(j=i;j<20000;++j)
{printf("%d %d %d",i,j,n-i-j),exit(0);}
}
if((i+j<n)&&prime[i]&&prime[j]&&prime[n-i-j])
这句话中&&改为&后则只得90分,如果再进一步去掉(i+j<n)的条件,则只得30分,所以改成按位与为什么不对
by jifbt @ 2023-04-21 18:04:37
@cz_awa 逻辑与 &&
前面的表达式如果结果为 0,就不会计算后面的表达式;按位与 &
则会计算,可能导致数组越界。数组越界太多会 RE
,比较少的话也会返回错误结果,导致 WA
。
by cat_lover1 @ 2023-04-21 18:09:37
@jifbt 明白了,谢谢