算阶乘质因数的个数(CodeForces 546D)
其实,我也不太懂,觉得这是一个很好的方法,不会超时。分享一个题目吧,然后把我的理解也写出来。
代码:
#include<iostream> #include<algorithm> #include<math.h> #include<stdio.h> #include<string.h> #define maxn 5000010 using namespace std; long long dp[maxn]; void init() { dp[1]=dp[2]=0; for(int i=2;i<maxn;i++) { if(!dp[i]) { for(int j=i;j<maxn;j+=i) { dp[j]=dp[j/i]+1;//这里就把所有的合数找出来了 } } } for(int i=2;i<maxn;i++) { dp[i]=dp[i]+dp[i-1];//因为偶数只能找偶质因数,所以要加上dp[i-1]吧,瞎猜的 } } int main() { memset(dp,0,sizeof(dp)); int t; init(); scanf("%d",&t); while(t--) { int a,b; scanf("%d%d",&a,&b); printf("%lld\n",dp[a]-dp[b]); } return 0; }