zoukankan      html  css  js  c++  java
  • Java实现 蓝桥杯VIP 算法提高 欧拉函数

    算法提高 欧拉函数
    时间限制:1.0s 内存限制:512.0MB
    说明
      2016.4.5 已更新试题,请重新提交自己的程序。
    问题描述
      给定一个大于1,不超过2000000的正整数n,输出欧拉函数,phi(n)的值。
      如果你并不了解欧拉函数,那么请参阅提示。
    输入格式
      在给定的输入文件中进行读入:
      一行一个正整数n。
    输出格式
      将输出信息输出到指定的文件中:
      一行一个整数表示phi(n)。
    样例输入
    17
    样例输出
    16
    提示
      欧拉函数phi(n)是数论中非常重要的一个函数,其表示1到n-1之间,与n互质的数的个数。显然的,我们可以通过定义直接计算phi(n)。
      当然,phi(n)还有这么一种计算方法。
      首先我们对n进行质因数分解,不妨设n=p1^a1 * p2^a2 * … * pk^ak (这里a^b表示a的b次幂,p1到pk为k个互不相同的质数,a1到ak均为正整数),那么
      phi(n)=n(1-(1/p1))(1-(1/p2))…(1-(1/pk))
      稍稍化简一下就是
      phi(n)=n(p1-1)(p2-1)…(pk-1)/(p1p2…*pk)

    计算的时候小心中间计算结果超过int类型上界,可通过调整公式各项的计算顺序避免(比如先做除法)!

    	import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    
    public class 欧拉函数 {
    	static int n;
    	public static void main(String[] args) throws IOException {
    		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    		n=Integer.parseInt(br.readLine());
    		System.out.println(phi(n));
    	}
    	private static int phi(int n) {
    		// TODO Auto-generated method stub
    		int sum=n,x=n;
    		for(int i=2;i<=n/2+1;i++){
    			if(x%i==0){
    				sum=sum/i*(i-1);
    				while(x%i==0)
    					x=x/i;
    			}
    		}
    		if(sum==x)
    			sum=sum-1;
    		return sum;
    	}
    
    }
    
    
  • 相关阅读:
    AngularJS Insert Update Delete Using PHP MySQL
    Simple task manager application using AngularJS PHP MySQL
    AngularJS MySQL and Bootstrap Shopping List Tutorial
    Starting out with Node.js and AngularJS
    AngularJS CRUD Example with PHP, MySQL and Material Design
    How to install KVM on Fedora 22
    Fake_AP模式下的Easy-Creds浅析
    河南公务员写古文辞职信
    AI
    政协委员:最大愿望是让小学生步行上学
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13078300.html
Copyright © 2011-2022 走看看