首页 > 代码库 > Codeforces 546D Soldier and Number Game(数论)
Codeforces 546D Soldier and Number Game(数论)
类似筛素数的方法……求出前缀和。然后直接O(1)回答即可。
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define rep(i,a,b) for(int i(a); i <= (b); ++i) 6 7 const int N = 10000000 + 10; 8 9 int num[N]; 10 bool p[N]; 11 int T, n, m; 12 13 int main(){ 14 15 memset(p, true, sizeof p); 16 memset(num, 0, sizeof num); 17 18 p[1] = false; 19 rep(i, 2, N - 6) if (p[i]){ 20 for (int j = i; j <= N; j += i){ 21 int tmp = j; 22 while (tmp % i == 0){ 23 ++num[j]; 24 tmp /= i; 25 } 26 p[j] = false; 27 } 28 } 29 30 rep(i, 2, N - 6) num[i] += num[i - 1]; 31 32 scanf("%d", &T); 33 while (T--){ 34 scanf("%d%d", &n, &m); 35 printf("%d\n", num[n] - num[m]); 36 } 37 38 return 0; 39 40 }
Codeforces 546D Soldier and Number Game(数论)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。