标签:算法 codeforces
素因子种类数:
对于一个n,他的素因子总类数 有多少? Facebook Hackercup Round1 Homework题,10pts
运用筛法,然后P[j]=i ->P[j]++
int GetPrimeFactorTypeTimes(int n) { memset(P , 0, sizeof P); for(int i=2;2*i<=n;i++) { if(!P[i]) { for(int j=2*i;j<=n;j+=i) P[j]++; } } return P[n]; }
素因子种类数:
对于一个n,他的素因子总个数 有多少?CodeForces http://codeforces.com/contest/546/problem/D
先筛法算每个j的一个素因子,只要存任意一个就行,然后dp一下,运用分治的思想,解决子问题,然后递推上来就好了
LL dp[maxn], P[maxn], Sum[maxn], n, t, m, a, b; void Init() { memset(P, 0, sizeof P); P[1]=1; for(LL i=2;i*i<=maxn;i++) { if(!P[i]) { for(LL j=i*i;j<=maxn;j+=i) P[j]=i; } } dp[1]=dp[2]=dp[3]=1; for(LL i=2;i<=maxn;i++) dp[i]= (P[i] ? (dp[i/P[i]]+1) : 1); Sum[0]=0; for(LL i=1;i<=maxn;i++) Sum[i]=Sum[i-1]+dp[i]; } int main() { /* #ifndef ONLINE_JUDGE freopen ("in.txt" , "r" , stdin); freopen ("out.txt" , "w" , stdout); #endif */ Init(); t=getint(); for(int ti=1;ti<=t;ti++) { a=getint(), b=getint(); printf("%d\n", Sum[a]-Sum[b]); } return 0; }
暴力枚举,从1->sqrt(n), 或者质因子分解,然后每个幂次+1累乘就好了。
文件结束标志EOF,windows下ctrl+z是结束,Linux只是-1,表示函数的一个返回值
标签:算法 codeforces
原文地址:http://blog.csdn.net/richardzrc/article/details/46487269