CodeForces 546D Soldier and Number Game 打表(求质因子个数)

  题目:戳我这个题与HDUOJ 5317有异曲同工之妙

 

  题意:题意看懂了上面的一大串英文之后其实很简单,就是给你一个正整数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 }

 

posted @ 2015-08-01 16:10  TaoTaoCome  阅读(179)  评论(0编辑  收藏  举报