zoukankan      html  css  js  c++  java
  • [Violet]樱花

    题目链接

    洛谷
    狗粮版

    前置技能

    1. 初中基础的因式分解
    2. 线性筛
    3. (O(nlog))的分解质因数
    4. 唯一分解定理

    题解

    首先来分解一下式子

    [frac{1}{x}+frac{1}{y}=frac{1}{n!} ]

    通分可化为:

    [frac{x+y}{xy}=frac{1}{n!} ]

    两边同时乘(xy*(n!))

    [(x+y)n!=xy ]

    移项得:

    [xy-(x+y)n!=0 ]

    两边同时加上((n!)^2)

    [xy-(x+y)n!+(n!)^2=(n!)^2 ]

    通过十字相乘可因式分解为:

    [(x-n!)(y-n!)=(n!)^2 ]

    [∵frac{1}{x}+frac{1}{y}=frac{1}{n!} ]

    [∴x,y>n! ]

    又因为(x,y)为正整数,所以((x-n!),(y-n!))也为正整数,所以我们不妨令

    [X=(x-n!),Y=(y-n!) ]

    则原式可以化为:

    [XY=(n!)^2 ]

    根据唯一分解定理可知

    [n!=P_1^{a_1}P_2^{a_2}P_3^{a_3}...P_n^{a_n}(p_i为质数) ]

    ((n!)^2)的因数个数为:

    [(2*a_1+1)*(2*a_2+1)*(2*a_3+1)*...*(2*a_n+1) ]

    所以我们只要算出(a_1,a_2,a_3...a_n)就好了
    至于怎么算,线性筛一遍,在分解质因数,求(a_i)就好了

    code

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    const int N=1000000;
    const int mod = 1e9+7;
    int prime[N+1],a[N+1],js,v[N+1],c[N+1];
    int read(){
        int x=0,f=1;char c=getchar();
        while(c<'0'||c>'9')  f=(c=='-')?-1:1,c=getchar();
        while(c>='0'&&c<='9')  x=x*10+c-'0',c=getchar();
        return x*f;
    }
    void pd(){
        for(int i=2;i<=N;i++){
            if(!prime[i]) a[++js]=i,v[i]=i;
            for(int j=1;j<=js;j++){
                if(i*a[j]>N)  break;
                prime[i*a[j]]=1;
                v[i*a[j]]=a[j];
            }
        }
    }
    main(){
        int n=read(),x,ans=1;
        pd();
        v[1]=1;
        for(int i=1;i<=n;i++)
            for(int j=i;j!=1;j/=v[j])
                c[v[j]]++;
        for(int i=1;i<=N;i++)
            ans*=(c[i]*2+1),ans%=mod;
        printf("%lld",ans%mod);
    }
    
    
  • 相关阅读:
    【docker】更换挂载目录
    【设计】交互走查表
    MySQL常用字符串函数
    VIM_manual
    MySQL操作符
    基础SELECT实例
    MySQL字符集及校对规则的理解
    Linux命令之tar-rsync
    Linux-PATH_环境变量
    MySQL常用数据类型
  • 原文地址:https://www.cnblogs.com/hbxblog/p/9868024.html
Copyright © 2011-2022 走看看