这个题, 告诉你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 }
时间: 2024-11-07 08:49:54