码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces 546D Soldier and Number Game

时间:2015-12-06 13:09:04      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

题目链接

这个题, 告诉你a, b的值, 那么只需要求出b到a之间的数, 每个数有多少个因子就可以。

具体看代码, 代码里面有解释

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define pb(x) push_back(x)
 4 const int maxn = 5000005;
 5 int p[maxn], c[maxn];
 6 int main()
 7 {
 8     memset(p, 0, sizeof(p));
 9     memset(c, 0, sizeof(c));
10     for(int i = 2; i<=maxn; i++) {
11         if(!p[i]) {
12             p[i] = i;
13             for(int j = i+i; j<=maxn; j+=i) {
14                 p[j] = i;                //求出一个数的最大素因子
15             }
16         }
17     }
18     for(int i = 2; i<=maxn; i++) {
19         p[i] = p[i/p[i]]+1;             //这里, p[4]就等于p[2]+1, p[8] = p[8/2]+1 = p[4]+1这样类推就可以求出答案 
20         c[i] = c[i-1]+p[i];
21     }
22     int t, a, b;
23     cin>>t;
24     while(t--) {
25         scanf("%d%d", &a, &b);
26         printf("%d\n", c[a]-c[b]);
27     }
28 }    

 

codeforces 546D Soldier and Number Game

标签:

原文地址:http://www.cnblogs.com/yohaha/p/5023306.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!