zoukankan      html  css  js  c++  java
  • 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.

    解题分析:

    其实只要看懂题目就会发现这道题是欧拉函数的模板题,即求小于n且与n互质的数的个数。

    欧拉函数的基本性质: >>>

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    
    //直接求解欧拉函数  
    int euler(int n){   
         int res=n,a=n;  
         for(int i=2;i*i<=a;i++){  
             if(a%i==0){  
                 res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出   
                 while(a%i==0) a/=i;  
             }  
         }  
         if(a>1) res=res/a*(a-1);  
         return res;  
    }  
    
    /*
    //筛选法打欧拉函数表   
    #define Max 1000001  
    int euler[Max];  
    void Init(){   
         euler[1]=1;  
         for(int i=2;i<Max;i++)  
           euler[i]=i;  
         for(int i=2;i<Max;i++)  
            if(euler[i]==i)  
               for(int j=i;j<Max;j+=i)  
                  euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出   
    }  
    */
    
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF,n)
        {
            printf("%d
    ",euler(n));
        }
        return 0;
    }

    2018-07-30

  • 相关阅读:
    CentOS7 安装jdk8
    CentOS7 安装和配置 mysql5.7
    CentOS7 安装和配置Tomcat
    vi编辑器设置行号可见
    前端基础-css(2)
    前端基础-css(1)
    前端基础-html(3)
    前端基础-html(2)
    前端基础-html(1)
    IO多路复用、协程
  • 原文地址:https://www.cnblogs.com/00isok/p/9392848.html
Copyright © 2011-2022 走看看