满分了但有疑惑

P1579 哥德巴赫猜想(升级版)

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 明白了,谢谢


|