1 条题解

  • 0
    @ 2026-9-30 12:54:44

    C++ :

    
    #include <cstdio>
    #include <cmath>
    // 题面写「x^2,y^2,z^2 均 <= R」,但样例 R=10 -> 2 表明实际是 1<=X<=Y<=Z<=R
    // (R=10 时 (3,4,5) 与 (6,8,10) 两组,与样例一致)。
    // u=z-x, v=z+x => u*v=y^2, u<v, u,v 同奇偶;
    // x=(v-u)/2, z=(u+v)/2, y=sqrt(u*v),要求 1<=x<=y<=z<=R。
    int main(){
        long long R; if(scanf("%lld",&R)!=1) return 0;
        long long cnt=0;
        for(long long u=1; u<=2*R; u++){
            for(long long v=u+2; v<=2*R; v+=2){       // u,v 同奇偶: 从 u 走两步
                long long z=(u+v)/2;
                if(z>R) break;
                if((u%2)!=(v%2)) continue;
                long long prod=u*v;
                long long y=(long long)(sqrt((double)prod)+0.5);
                while(y>0 && y*y>prod) y--;
                while((y+1)*(y+1)<=prod) y++;
                if(y*y!=prod) continue;
                long long x=(v-u)/2;
                if(x<1) continue;
                if(x<=y && y<=z) cnt++;
            }
        }
        printf("%lld\n",cnt);
        return 0;
    }
    
    
    
    • 1

    信息

    ID
    2779
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者