zoukankan      html  css  js  c++  java
  • 【poj 2478 Farey Sequence (欧拉函数、数论)】

    Farey Sequence
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 9180   Accepted: 3501

    Description

    The Farey Sequence Fn for any integer n with n >= 2 is the set of irreducible rational numbers a/b with 0 < a < b <= n and gcd(a,b) = 1 arranged in increasing order. The first few are 
    F2 = {1/2} 
    F3 = {1/3, 1/2, 2/3} 
    F4 = {1/4, 1/3, 1/2, 2/3, 3/4} 
    F5 = {1/5, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5} 

    You task is to calculate the number of terms in the Farey sequence Fn.

    Input

    There are several test cases. Each test case has only one line, which contains a positive integer n (2 <= n <= 106). There are no blank lines between cases. A line with a single 0 terminates the input.

    Output

    For each test case, you should output one line, which contains N(n) ---- the number of terms in the Farey sequence Fn. 

    Sample Input

    2
    3
    4
    5
    0

    Sample Output

    1
    3
    5
    9

    Source

    POJ Contest,Author:Mathematica@ZSU
     
     
     
     1 // Project name : 2478 ( Farey Sequence ) 
     2 // File name    : main.cpp
     3 // Author       : Izumu
     4 // Date & Time  : Fri Jul 13 16:30:10 2012
     5 
     6 
     7 #include <iostream>
     8 #include <stdio.h>
     9 #include <string>
    10 #include <cmath>
    11 #include <algorithm>
    12 using namespace std;
    13 
    14 #define MAXN 1000100
    15 
    16 typedef unsigned long long int longint;
    17 
    18 ///////////////////////////////////////////////////////////////////
    19 bool prime[MAXN];
    20 ///////////////////////////////////////////////////////////////////
    21 void CInitPrime()
    22 {
    23     for (int i = 0; i < MAXN; i++)
    24     {
    25         prime[i] = true;
    26     }
    27 
    28     int current_prime = 2;
    29     for (; current_prime * current_prime <= MAXN; current_prime++)
    30     {
    31         if (prime[current_prime] == true)
    32         {
    33             for (int i = current_prime * current_prime; i < MAXN; i = i + current_prime)
    34             {
    35                 prime[i] = false;
    36             }
    37         }
    38     }
    39 }
    40 ///////////////////////////////////////////////////////////////////
    41 longint phi[MAXN];
    42 ///////////////////////////////////////////////////////////////////
    43 void CInitPhi()
    44 {
    45     for (int i = 1; i < MAXN; i++)
    46     {
    47         phi[i] = i;
    48     }
    49 
    50     for (int i = 2; i < MAXN; i++)
    51     {
    52         if (prime[i])
    53         {
    54             for (int j = i; j < MAXN; j += i)
    55             {
    56                 phi[j] = phi[j] / i * (i - 1);
    57             }
    58         }
    59     }
    60 }
    61 ///////////////////////////////////////////////////////////////////
    62 int main()
    63 {
    64     CInitPrime();
    65     CInitPhi();
    66     int index;
    67     while (cin >> index && index)
    68     {
    69         longint sum = 0;
    70         for (int i = 2; i <= index; i++)
    71         {
    72             sum += phi[i];
    73         }
    74         cout << sum << endl;
    75     }
    76     return 0;
    77 }
    78 
    79 // end 
    80 // ism 
  • 相关阅读:
    A方法调用B方法,JVM是怎么一步一步调用的
    java ImmutableMap使用
    使用 Spring 配置动态数据源实现读写分离
    spring-boot的三种启动方式
    使用 Spring 配置动态数据源实现读写分离
    Java改变生成随机数的平均值(改变生成随机数的概率)
    微信抢红包算法实现(JAVA)
    Redis分布式锁的实现原理
    Redis和队列
    springboot自定义配置文件
  • 原文地址:https://www.cnblogs.com/ismdeep/p/2590551.html
Copyright © 2011-2022 走看看