zoukankan      html  css  js  c++  java
  • poj2478 Farey Sequence

    求∑φ(i),i ≤ n。

    根据欧拉函数的定义,当a,b互质时,φ(ab)=φ(a)φ(b),若b|a且b是素数,则φ(ab)=b*φ(a)。

    用素数筛法预处理出1e6之内的所有素数和欧拉函数。

    http://poj.org/problem?id=2478

     1 #include <cstdio>
     2 #include <cstring>
     3 typedef __int64 LL;
     4 using namespace std;
     5 const int maxn = 1e6 + 10;
     6 LL f[maxn];
     7 int prime[maxn], k;
     8 bool vis[maxn];
     9 int n;
    10 
    11 void init(){
    12     memset(vis, 0, sizeof vis);
    13     k = 0;
    14     for(int i = 2; i <= 1e6; i++){
    15         if(!vis[i]){
    16             prime[k++] = i;
    17             f[i] = i - 1;
    18         }
    19         for(int j = 0; j < k && prime[j] * i <= 1e6; j++){
    20             vis[prime[j] * i] = 1;
    21             if(i % prime[j] == 0){
    22                 f[i * prime[j]] = prime[j] * f[i];
    23                 break;
    24             }
    25             else f[i * prime[j]] = f[i] * (prime[j] - 1);
    26         }
    27     }
    28     f[0] = 0;
    29     for(int i = 1; i <=  1e6; i++) f[i] += f[i - 1];
    30 }
    31 
    32 int main(){
    33     init();
    34     while(~scanf("%d", &n) && n) printf("%I64d
    ", f[n]);
    35     return 0;
    36 }
    View Code
  • 相关阅读:
    (Problem 4)Largest palindrome product
    (Problem 3)Largest prime factor
    (Problem 2)Even Fibonacci numbers
    (Problem 1)Multiples of 3 and 5
    Ural 1086
    Ural 1319
    Ural 1149
    Ural 1079
    Ural 1068
    2016/04/06
  • 原文地址:https://www.cnblogs.com/astoninfer/p/4806344.html
Copyright © 2011-2022 走看看