zoukankan      html  css  js  c++  java
  • 2721: [Violet 5]樱花|约数个数

    先跪一发题目背景QAQ
    显然x,y>n!,然后能够设y=n!+d
    原式子能够化简成

    x=n!2d+n!

    那么解的个数也就是n!的因子个数,然后线性筛随便搞一搞

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<vector>
    #include<set>
    #include<map>
    #include<iostream>
    #include<algorithm>
    #define N 1000008
    #define mod  1000000007
    using namespace std;
    int sc()
    {
        int i=0,f=1; char c=getchar();
        while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar();
        return i*f;
    }
    long long ans=1;
    int lo[N],low[N],a[N],prime[N],s[N],top;
    int sum[N],n;
    void pre(int n)
    {
        for(int i=2;i<=n;i++)
        {
            if(!a[i])
                s[prime[++top]=low[i]=lo[i]=i]=1;
            for(int j=1;prime[j]*i<=n;j++)
            {
                a[i*prime[j]]=1;
                lo[i*prime[j]]=prime[j];
                if(i%prime[j]==0)
                {
                    low[i*prime[j]]=low[i]*prime[j];
                    s[i*prime[j]]=s[i]+1;
                    break;
                }
                low[i*prime[j]]=prime[j];
                s[i*prime[j]]=1;
            }
        }
    }
    int main()
    {
        pre(n=sc());
        for(int i=2;i<=n;i++)
        {
            int now=i;
            while(now!=1)
                sum[lo[now]]+=2*s[now],now/=low[now];
        }
        for(int i=1;i<=n;i++)
            ans=ans*(sum[i]+1)%mod;
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    文本替换
    国际时间转化为北京时间
    nginx 白名单
    System.Web.HttpException 超过了最大请求长度。
    nginx 优化
    nginx 502 504
    nginx 配置文件相关参数
    nginx location指令 正则表达式
    子网下连接路由器配置
    Java初学者
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7381307.html
Copyright © 2011-2022 走看看