• POJ_2407 Relatives 【欧拉函数裸题】


    一、题目

    Given n, a positive integer, how many positive integers less than n are relatively prime to n? Two integers a and b are relatively prime if there are no integers x > 1, y > 0, z > 0 such that a = xy and b = xz.

    Input

    There are several test cases. For each test case, standard input contains a line with n <= 1,000,000,000. A line containing 0 follows the last case.

    Output

    For each test case there should be single line of output answering the question posed above.

    Sample Input

    7
    12
    0
    

    Sample Output

    6
    4

    二、题意分析

    给定一个数N,求小于等于这个数的所有数中,所有与N互质的数的数目。题意就是欧拉函数的定义。

    三、AC代码

    #include <iostream>
    #include <cmath>
    #include <cstring>
    using namespace std;
    const int MAXN = 1e5+3;
    int Prime[MAXN], nPrime;
    bool isPrime[MAXN];
    
    void getPrime()
    {
        memset(isPrime, 1, sizeof(isPrime));
        isPrime[0] = isPrime[1] = 0;
        nPrime = 0;
        for(int i = 2; i < MAXN; i++)
        {
            if(isPrime[i])
                Prime[nPrime++] = i;
            for(int j = 0; j < nPrime && (long long)Prime[j]*i < MAXN; j++)
            {
                isPrime[Prime[j]*i] = 0;
                if(i%Prime[j] == 0)
                    break;
            }
        }
    }
    
    int Euler(int n)
    {
        int ans = n;
        for(int i = 0; Prime[i]*Prime[i] <= n; i++)
        {
            if(n%Prime[i] == 0)
            {
                ans = ans - ans/Prime[i];
                do
                {
                    n/=Prime[i];
                }
                while(n%Prime[i] == 0);
            }
        }
        if(n > 1)
            ans = ans - ans/n;
        return ans;
    }
    
    int main()
    {
        int N;
        getPrime();
        while(cin >> N && N)
        {
            cout << Euler(N) << endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    如何选择开源许可证?(转)
    gdb的使用(转)
    git的使用
    2017-3-13 leetcode 4 11 15
    2017-3-12 leetcode 167 209 216
    2017-3-11 leetcode 217 219 228
    2017-3-10 leetcode 229 238 268
    1175: 零起点学算法82——find your present
    1174: 零起点学算法81——求整数绝对值
    1173: 零起点学算法80——求实数绝对值
  • 原文地址:https://www.cnblogs.com/dybala21/p/9747397.html
Copyright © 2020-2023  润新知