zoukankan      html  css  js  c++  java
  • 「一本通 6.2 练习 5」樱花

    「一本通 6.2 练习 5」樱花

    樱花.png

    引理1:对于不定方程:a*b=c的解的个数,即为c的约数个数(易证,一一对应关系)

    引理2: p在n!的幂次方为sigma k=1~+oo n/(p^k)

    扯淡趣谈:求126!末尾有几个0?

    转换为求126!分解质因数后有几个5
    那不就可以用上面的引理2了嘛
    floor(126/5)+floor(126/25)+floor(126/125)

    /*
    reference:
    	
    Date:
    	2019.10.09
    sol:
    	
    */
    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    template <typename T>inline void rd(T &x){x=0;char c=getchar();int f=0;while(!isdigit(c)){f|=c=='-';c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}x=f?-x:x;}
    #define rep(i,a,b) for(int i=(a);i<=(b);++i)
    #define dwn(i,a,b) for(int i=(a);i>=(b);--i)
    #define mem(a,b) memset(a,b,sizeof(a))
    #define ee(i,u) for(int i=head[u];i;i=e[i].next)
    
    const int N =1e6+10,mod=1e9+7;
    int n,tot_p;
    int v[N],p[N];
    
    int ans=1;
    
    inline void shai(){
    	rep(i,2,N){
    		if(v[i]==0){
    			v[i]=i;
    			p[++tot_p]=i;
    		}
    		rep(j,1,tot_p){
    			if(p[j]>v[i] || p[j]>N/i)break;
    			v[i*p[j]]=p[j];
    		}
    	}
    }
    
    #undef int
    int main(){
    #define int long long
    	#ifdef WIN32
    	freopen("yinghua.txt","r",stdin);
    	#endif
    	rd(n);
    	shai();
    	for(int i=1;p[i]<=n;++i){
    		int now=p[i];
    		int cnt=0;
    		while(now<=n){
    			cnt+=n/now;
    			now*=p[i];
    		}
    //		(ans*=(cnt<<1|1)%mod)%mod;//这种写法会爆,以后千万不能这样写了!!! 
    		ans=(ans*(cnt<<1|1)%mod)%mod;
    	}
    	printf("%lld",ans);
    	return 0;
    }
    
  • 相关阅读:
    HttpClientUtil
    JacksonUtils
    spring-security oauth2.0简单集成
    python连接mysql
    钉钉机器人消息体
    Android Studio gradle
    Android Studio从Eclipse导项目
    Docker
    Unity WebGL
    主席树
  • 原文地址:https://www.cnblogs.com/sjsjsj-minus-Si/p/11642316.html
Copyright © 2011-2022 走看看