西安电子科技大学第16届程序设计竞赛网络同步赛 G-小国的复仇

sb找规律。 分解因数。

 1 #include<bits/stdc++.h>
 2 #define LL long long
 3 #define fi first
 4 #define se second
 5 #define mk make_pair
 6 using namespace std;
 7 
 8 const int N=1e6+7;
 9 const int M=100+7;
10 const int inf=0x3f3f3f3f;
11 const LL INF=0x3f3f3f3f3f3f3f3f;
12 const int mod=1e9 + 9;
13 
14 int f[N];
15 bool prime[N];
16 
17 void init() {
18     memset(prime, true, sizeof(prime));
19     prime[0] = prime[1] = false;
20     f[1] = 0;
21     for(int i = 2; i < N; i++) {
22         if(!prime[i]) {
23             continue;
24         } else {
25             f[i] = i - 1;
26             for(int j = i + i; j < N; j += i) {
27                 prime[j] = false;
28                 int now = j;
29                 while(now % i == 0) {
30                     f[j] += f[i];
31                     now /= i;
32                 }
33             }
34         }
35     }
36 }
37 
38 int main() {
39     init();
40     int T; scanf("%d", &T);
41     while(T--) {
42         int n; scanf("%d", &n);
43         printf("%d\n", f[n]);
44     }
45     return 0;
46 }
47 /***************
48 ****************/

猜你喜欢

转载自www.cnblogs.com/CJLHY/p/8921145.html