给定一个正整数 n,求 1∼n 中每个数的欧拉函数之和。
共一行,包含一个整数 n。
共一行,包含一个整数,表示 1∼n 中每个数的欧拉函数之和。
1≤n≤
6
12
代码:
- #include
- using namespace std;
-
- const int N = 1000010;
- int n,cnt;
- int phi[N],att[N],Primes[N];
-
- long long Get_eulers(int n){
- long long res = 0;
- phi[1] = 1;
- for(int i = 2; i <= n;i ++){
- if(att[i] == 0){
- Primes[cnt] = i;
- cnt++;
- phi[i] = i - 1;
- }
- for(int j = 0;Primes[j] <= n / i;j++){
- att[i * Primes[j]] = 1;
- if(i % Primes[j] == 0){
- phi[i * Primes[j]] = phi[i] * Primes[j];
- break;
- }else{
- phi[i * Primes[j]] = phi[i] * (Primes[j] - 1);
- }
- }
- }
- for(int i = 0;i <= n;i ++){
- res += phi[i];
- }
- return res;
- }
-
- int main(){
- cin>>n;
- long long ans = Get_eulers(n);
- cout<
- return 0;
- }
-