2016年7月6日 星期三

Q11417: GCD


https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2412

import java.util.*;

public class Main {

 public static void main(String[] args) {
  Scanner scn = new Scanner(System.in);
  while(scn.hasNext()){
   int n=scn.nextInt(),g=0;
   if(n==0)break;
   for(int i=1;i<n;i++){
    for(int j=i+1;j&lt=n;j++){
     g+=gcd(i,j);
    }
   }
   System.out.println(g);
  }
 }
 public static int gcd(int i,int j){
  while((i%=j)!=0&&(j%=i)!=0);
  return i+j;
 }
 /* 
    題目:Q11417: GCD
    作者:1010
    時間:西元 2016 年 7 月 */

}


困難度 
這題很簡單只是呼叫gcd()自己撰寫的求最大公因數,然後再依題意雙迴圈加起來
求最大公因數的方法有兩種:

public class Main {

 public static void main(String[] args) {
  int a=300,b=250;
  while((a%=b)!=0&&(b%=a)!=0);//注意要括號包起來!
  System.out.println("The GCD is:"+(a+b));
 }
 /* 
    題目:求最大公因數 方法一
    作者:1010
    時間:西元 2016 年 7 月 */
}


public class Main {

 public static void main(String[] args) {
  int a=300,b=250;
  while(b!=0){
   int temp=a%b;
   a=b;
   b=temp;
  }
  System.out.println("The GCD is:"+a);
 }
 /* 
    題目:求最大公因數 方法二
    作者:1010
    時間:西元 2016 年 7 月 */
}


public class Main {

 public static void main(String[] args) {
  int a=300,b=250;
  System.out.println("The LCM is:"+(a*b)/gcd(a,b));//最小公倍數=兩數相乘除以兩數的的最大公因數
 }
 public static int gcd(int i,int j){
  while((i%=j)!=0&&(j%=i)!=0);
  return i+j;
 }
 /* 
    題目:求最小公倍數(結合GCD方法一實現))
    作者:1010
    時間:西元 2016 年 7 月 */
}


沒有留言:

張貼留言