塔子哥希望你找出满足A+B=C2,且A,B,C均小于等于N的素数三元组(A,B,C)的数量。
一个朴素的想法是:1.先得到n以内的素数 2.两重循环枚举A+B , 判断是否是某个素数的平方。
对于第一步,n=5e5 , 需要使用素数筛来加速这个过程。直接暴力判素数O(nn)会超时。可以使用埃式筛得到。
对于第二步,我们从第一步得到素数为4e4数量级。所以无法直接O(p2)的作循环。但我们观察到这样的对其实很少!
因为A+B=C2 , 那么也就要求C不能太大,C=A+B≤2∗4e4=282 。 那么[1,282] 内的素数就非常稀少了。