CH3101 階乘分解
阿新 • • 發佈:2019-03-09
sin ret void etc mes pen har amp 暴力
解法
暴力算每個數的質因子復雜度和為n×sqrt(n)。
先篩出1~n的質數,p的次數為n/(p^k),p^k<=n.
代碼
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=1e6+5; int prime[N],v[N]; int n,num; int read() { int x=0,p=1; char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-') ch=getchar(); if(ch=='-') p=-1,ch=getchar(); while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar(); return x*p; } void Pri() { for(int i=2;i<=n;i++) { if(!v[i]) prime[++num]=v[i]=i; for(int j=1;j<=num;j++) { if(prime[j]>v[i] || prime[j]*i>n) break ; v[prime[j]*i]=prime[j]; } } } int main() { //freopen(".in","r",stdin); //freopen(".out","w",stdout); n=read(); Pri(); for(int i=1;i<=num;i++) { LL sum=prime[i],ans=0; while(sum<=n) { ans+=n/sum; sum*=prime[i]; } printf("%ld %ld\n",prime[i],ans); } return 0; }
CH3101 階乘分解