[lnsyoj1107] 统计

题意

给定 \(L\),求所有不超过 \(L\) 且满足 \(\exist n,m > 0,n^3+pn^2=m^3\) 的质数的个数

sol

因式分解,可得 \(n^2(n+p) = m^3\)
\(n^2\)\(n+p\) 都含有质因子 \(p\),则设 \(n = kp\),那么 \(n+p = (k+1)p\)
则有 \(k^2(k+1)p^3=m^3\),可得 \(k^2(k+1)\) 一定为立方数,由于 \(k^2\)\(k+1\) 互质,所以 \(k^2\)\(k+1\) 均为立方数,由于 \(k^2\) 是一个平方数,所以 \(k\) 为立方数,那么 \(k+1\) 不可能为立方数,矛盾,因此 \(n^2\)\(n+p\) 不可能都含有质因子
设两者都含有质因子 \(q\),则 \(n\) 含有质因子 \(q\),那么 \(p\) 含有质因子 \(q\),由于 \(p\) 是质数,所以不可能存在其他质因子,矛盾,因此 \(n^2\)\(n + p\) 互质。
由于 \(m^3\) 是一个立方数,因此 \(n^2\)\(n + p\) 都为立方数,因为 \(n^2\) 是平方数,那么 \(n\) 也为立方数,设 \(n=x^3,n+p=y^3\),那么 \(p=y^3 - x^3 =(y-x)(y^2+xy+x^2)\),由于 \(p\) 是质数,那么 \((y-x)\)\((y^2+xy+x^2)\) 中,有一个值为 \(1\),一个值为 \(p\),若 \(y^2+xy+x^2 = 0\),则 \(x=0,y=1\)\(x=1,y=0\),而 \(x>0,y>0\),所以 \(y-x=1\),则 \(y=x+1\)。代入可得 \(p=(x+1)^2+x(x+1)+x^2=3x^2+3x+1\),考虑到这个值可能不为质数,因此还要判断质数。

代码

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;
typedef long long LL;

int L;

LL f(int z){
    return (LL) 3 * z * z + 3 * z + 1;
}

bool is_prime(int x){
    if (x == 1) return false;
    for (int i = 2; i <= x / i; i ++ )
        if (x % i == 0) return false;
    return true;
}

int main(){
    scanf("%d", &L);
    int ans = 0;
    for (int z = 1; ; z ++ ){
        if (f(z) > L) break;
        ans += is_prime(f(z));
    }
    printf("%d\n", ans);
}
posted @ 2025-02-04 14:56  是一只小蒟蒻呀  阅读(15)  评论(0)    收藏  举报