标签:
题目:戳我
题意:题意看懂了上面的一大串英文之后其实很简单,就是给你一个正整数n,问你n有多少个质因子,不过这里n是通过a!/b!给定的,也就是说n=(a!/b!);
分析:由于这里1 ≤ b ≤ a ≤ 5 000 000,数据很大,所以简单暴力一定超时,具体看代码。
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 const int M = 5e6+5; 5 6 int t; //测试组数 7 int num[M] = {0}; //打表,将n的质因子个数存到num[n]中 8 int sum[M] = {0}; //sum[i]表示从num[1]到num[i]的和 9 void getsum( ) { 10 num[1] = 1; 11 num[2] = 1; 12 for( int i=2; i<M; i++ ) { 13 if( num[i] > 1 ) //判断i是否为素数 14 continue; 15 num[i] = 1; 16 for( int j=2; j*i<M; j++ ) { 17 num[j*i] = num[j] + 1; 18 } 19 } 20 for( int i=1; i<M; i++ ) 21 sum[i] = sum[i-1] + num[i]; 22 } 23 24 int main() 25 { 26 getsum(); 27 scanf("%d", &t ); 28 while( t-- ) { 29 int a, b; 30 scanf("%d %d", &a, &b ); 31 printf("%d\n", sum[a] - sum[b] ); 32 } 33 }
CodeForces 546D Soldier and Number Game 打表(求质因子个数)
标签:
原文地址:http://www.cnblogs.com/TaoTaoCome/p/4694239.html