zoukankan      html  css  js  c++  java
  • Relatives(欧拉函数)

    Description

    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代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int Euler(int x){
     4     int r=x;
     5     for(int i=2;i*i<=x;i++){//由于任何一个合数都至少有一个不大于根号x的质因子,所以只需遍历到根号x即可
     6         if(x%i==0){
     7             r=r/i*(i-1);//欧拉函数的通式,先除后乘,避免数据溢出
     8             while(x%i==0)x/=i;//消除x中所有质因子i,直到不能被i整除
     9         }
    10     }
    11     if(x>1)r=r/x*(x-1);//如果x大于1,说明还有一个质因子没有除掉
    12     return r;//返回个数
    13 }
    14 int main(){
    15     int n;
    16     while(cin>>n&&n)
    17         cout<<Euler(n)<<endl;
    18     return 0;
    19 }
  • 相关阅读:
    Exercice_3.8
    Exercice_3.13.1_练习使用vector2
    Exercice_3.13_练习使用vetor
    Exercice_3.10_去掉string对象中的标点符号
    Exercice_3.7_判断两个字符串的大小和长度
    1-日期时间视图 2-长按事件
    View(视图)2
    View(视图)
    计算器(UI事件)给按钮添加监听器
    Activity(活动)
  • 原文地址:https://www.cnblogs.com/acgoto/p/9317225.html
Copyright © 2011-2022 走看看