zoukankan      html  css  js  c++  java
  • wenbao与数论(大白书)

    最大公约数之和

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=26&problem=2421&mosmsg=Submission+received+with+ID+18788108

    输入n 输出gcd(i,j) 1<=i<j<=n总和

     1 #include <iostream>
     2 using namespace std;
     3 #define REP(i, x, n) for(int i = x; i < n; i++)
     4 #define ll long long
     5 const int maxn = 4000005;
     6 int phi[maxn], p[maxn];
     7 ll f[maxn], s[maxn];
     8 bool vis[maxn];
     9 void Euler(int n){
    10     int i, j, k, cnt = 0;
    11     phi[1] = 1;
    12     for (i = 2; i < n; ++i){
    13         if (!vis[i]){
    14             p[cnt++] = i;
    15             phi[i] = i - 1;
    16         }
    17         for (j = 0; j < cnt && i * p[j] < n; ++j){
    18             vis[i * p[j]] = true;
    19             if (i % p[j]) phi[i * p[j]] = phi[i] * phi[p[j]];
    20             else {
    21                 phi[i * p[j]] = phi[i] * p[j];
    22                 break;
    23             }
    24         }
    25     }
    26 }
    27 int main(){
    28     Euler(maxn);
    29     REP(i, 1, maxn){
    30         for(int j = i*2; j < maxn; j += i){
    31             f[j] += i * phi[j/i]; 
    32         }
    33     }
    34     s[2] = f[2];
    35     REP(i, 3, maxn) s[i] = s[i-1] + f[i];
    36     int n;
    37     while(scanf("%d", &n) && n){
    38         printf("%lld
    ", s[n]);
    39     }
    40     return 0;
    41 }

    只有不断学习才能进步!

  • 相关阅读:
    第十一周作业
    第十周作业
    第九周编程
    第十二周作业
    第十一周作业
    第十周作业
    第八周作业
    第七周作业
    第五周作业
    2019春季学期第四周作业
  • 原文地址:https://www.cnblogs.com/wenbao/p/6407414.html
Copyright © 2011-2022 走看看