• 【BZOJ2721】[Violet 5]樱花 线性筛素数


    【BZOJ2721】[Violet 5]樱花

    Description

    Input

    Output

    Sample Input

    2

    Sample Output

    3

    HINT

    题解,所以就是求(n!)2的约数个数

    又有一个结论,若n=Πpi^ei,那么n的约数个数就是Π(ei+1),所以我们只需要筛出1-n 的所有素数,再分别计算每个素数的贡献就行了。

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #define mod 1000000007
    using namespace std;
    typedef long long ll;
    const int maxn=1000010;
    bool np[maxn];
    int num;
    int pri[maxn/10];
    ll n,ans,sum;
    int main()
    {
    	scanf("%lld",&n);
    	ll i,j;
    	for(i=2;i<=n;i++)
    	{
    		if(!np[i])	pri[++num]=i;
    		for(j=1;j<=num&&i*pri[j]<=n;j++)
    		{
    			np[i*pri[j]]=1;
    			if(i%pri[j]==0)	break;
    		}
    	}
    	ans=1,sum=0;
    	for(i=1;i<=num;i++)
    	{
    		for(sum=0,j=pri[i];j<=n;j=j*pri[i])	sum=(sum+n/j)%mod;
    		ans=ans*(2*sum+1)%mod;
    	}
    	printf("%lld",ans);
    	return 0;
    }
  • 相关阅读:
    大数计算问题
    句子逆序
    字符个数统计
    提取不重复的整数
    合并表记录
    浅谈之高级查询over(partition by)
    proc之建表添加数据报错解决
    浅谈之过滤条件【or】
    浅谈之索引失效
    浅谈之表连接方法
  • 原文地址:https://www.cnblogs.com/CQzhangyu/p/6999711.html
Copyright © 2020-2023  润新知