Send a Table UVA - 10820

題目傳送門

題意:給出n,算出小於等於n的所有數中,有幾對互質。

思路:我們用歐拉函數打個表就好了。

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>

#define MAXN 100010
#define MAXE 400
#define INF 100000000
#define MOD 10001
#define LL long long
#define pi 3.14159

using namespace std;

LL phi[MAXN];
LL sum[MAXN];

void phi_table(int n) {
    memset(phi, 0, sizeof(phi));
    phi[1] = 1;
    for (int i = 2; i <= n; ++i) {
        if (!phi[i]) {
            for (int j = i; j <= n; j += i) {
                if (!phi[j]) {
                    phi[j] = j;
                }
                phi[j] = phi[j] / i * (i - 1);
            }
        }
    }
}

int main() {
    std::ios::sync_with_stdio(false);
    phi_table(50000);
    LL ans = 0;
    for (int i = 2; i <= 50000; ++i) {
        ans += 2 * phi[i];
        sum[i] = ans + 1;
    }
    int n;
    while (cin >> n && n) {
        if (n == 1) {
            cout << 1 << endl;
        } else {
            cout << sum[n] << endl;
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章