一年级新生,求助算法竞赛

学术版

听取MLE声一片 @ 2025-09-17 11:06:38

给定 nn\leq 10^{18},求有多少正整数对 (a,b) 满足 a^2+b^3=n。共 10^4 次询问。


by arrow_king @ 2025-09-17 11:07:11

大学一年级新生是吧


by Kaf_yoU @ 2025-09-17 11:07:19

请广大谷民在魔怔的时候记得藏钩


by mysterys @ 2025-09-17 11:07:57

大帝也来了


by 缪凌锴_Mathew @ 2025-09-17 11:07:57

太煎蛋了,只需要枚举ab从1道n不久对啦


by meyi @ 2025-09-17 11:07:58

感觉帖主智力有问题


by xhabc66 @ 2025-09-17 11:07:59

@DDD_et没有实人验证(悲


by 听取MLE声一片 @ 2025-09-17 11:09:42

@meyi 大佬你会做这道题吗。


by lgvc @ 2025-09-17 11:18:35

是不是什么,取个 p 是一堆小素数的乘积 ,枚举 b^3%p 再暴力来者


by 听取MLE声一片 @ 2025-09-17 11:21:55

@lgvc 细说


by lgvc @ 2025-09-17 11:32:27

@听取MLE声一片

#include <bits/stdc++.h>
#define MOD 60060
#define LL long long
std::vector<int> tq[MOD+10];
int T,ss[MOD+10],ok[MOD+10],qq;
signed main(void) {
    scanf("%d",&T);
    for(int i=1;i<=1000000;i++) {
        tq[1ll*i*i*i%MOD].push_back(i);
    }
    for(int i=0;i<MOD;i++) {
        ok[1ll*i*i%MOD]=1;
    }
    for(int i=0;i<MOD;i++) {
        if(ok[i]) {
            ss[++qq]=i;
        }
    }
    while(T--) {
        LL N;scanf("%lld",&N);
//      LL xx=rng()%500000000+1;
//      LL yy=rng()%500000+1;
//      N=1ll*xx*xx+1ll*yy*yy*yy;
        int ans=0;
        for(int i=1;i<=qq;i++) {
            LL xx=(N-ss[i]+MOD)%MOD;
            for(int j=0;j<tq[xx].size();j++) {
                LL v=N-1ll*tq[xx][j]*tq[xx][j]*tq[xx][j];
                if(v<=0) break;
                int x=sqrtl(v);
                if(1ll*x*x==v) {
                    ans++;
                }
            }
        }
        printf("%d\n",ans);
    }
}

写了一份,应该很好懂


| 下一页