Luogu P1445[Violet]樱花/P4167 [Violet]樱花


化简原式:
\[\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}\]
\[\frac{xy}{x+y}=n!\]
\[xy=n!(x+y)\]
\[-n!(x+y)+xy=0\]
\[(n!x+n!y)-xy=0\]
\[(n!)^2+(n!x+n!y)-xy=(n!)^2\]
\[(x-n!)(y-n!)=(n!)^2\]
所以\((x-n!)\)就是\((n!)^2\)的一个因子。
又因为\((x-n!)\)的数量和\(x\)相等,那么解的个数就是\((n!)^2\)的因数个数。

#include<bits/stdc++.h>
#define N 1000010
#define MOD 1000000007

using namespace std;

int n,cnt;
int pri[N];
long long ans=1;
bool vis[N];

void Read() {
    scanf("%d",&n);
    return;
}

void EulerSieve(int x) {
    for(int i=2;i<=x;i++) {
        if(!vis[i]) {
            pri[++cnt]=i;
        }
        for(int j=1;j<=cnt;j++) {
            if(i*pri[j]>x) {
                break;
            }
            else {
                vis[i*pri[j]]=1;
            }
            if(!(i%pri[j])) {
                break;
            }
        }
    }
    return;
}

int Factor(int k,int p) {
    if(k<p) {
        return 0;
    }
    else {
        return k/p+Factor(k/p,p);
    }
}

void Solve() {
    for(int i=1;i<=cnt;i++) {
        ans*=Factor(n,pri[i])*2+1;
        ans%=MOD;
    }
    printf("%lld",ans);
    return;
}

int main()
{
    Read();
    EulerSieve(n);
    Solve();
    return 0;
}
01-22 14:28
查看更多