格式化

廣告

廣告2

2012年9月23日 星期日

[JAVA教學範例] b081: B. 友好數 (公因數)

[JAVA教學範例] b081: B. 友好數 (公因數)


內容 :
畢達哥拉斯是公元前六世紀的古希臘數學家。據說曾有人問他:「朋友是什麼?」他回答:「這是第二個我,正如220與284。」為什麼他把朋友比喻成了兩個數呢?原來220的真因數是1,2,4,5,10,11,20,22,44,55和110,加起來得284;而284的真因數是1,2,4,71,142,加起來也恰好是220。284和220就是友好數。它們是人類最早發現的又是所有友好數中最小的一對。(n的真音數就是所有小於 n 的正因數。)

220和248這一對數被認為是友誼的象徵。中世紀曾有一種熱門的護身符,護身符上就刻了這一對親和數,佩帶這種護身符的目的是促進愛情的發展。又有一說,如果分別在二只水果上刻下220及248這一對親和數,吃下第一只,然後將第二只送給所愛的人吃,就能有意想不到的效果。另外,創世紀中記載了雅各(Jacob)送給以掃(Esau)220隻山羊;早期的神學家認為山羊的數目可以解讀成雅各對以掃的摯愛之情的表達。

二千多年後的1636年人們才發現了第二對友好數 17296 與 18416。之後,人類不斷發現新的友好數。1747年,偉大的數學家歐拉(Euler)已經知道30對,1750年又增加到60對。到現在數學家已經發現了900對以上這樣的友好數。

輸入說明 :
輸入檔中有許多數字,每個數字 n 佔一行,最後一個數字是 0,不需要對這個 0 輸出任何東西。其餘的數字都介於 2 與1000000 之間。

輸出說明 :
對輸入的每個數 n,請試著找出是否存在某個數 m,使得 n 和 m 是友好數。如果有,請輸出 m,如果 n 和它自己形成友好數(也就是 n 的真因數和剛好也是 n)則輸出 =n,否則輸出 0。每個輸出都佔一行

範例輸入 :
220
28
19
0

範例輸出 :
284
=28
0

提示 :
* 因為 28 的真因數有1,2,4,7和14,總和剛好也是 28。

出處 :
2007 NPSC 國中組決賽

範例解答:
import java.io.IOException;
import java.util.Scanner;
//import java.lang.Math;
 
public class eee { 
    @SuppressWarnings({ "resource", "unused" })
 public static void main(String[] args) throws IOException { 

     Scanner read = new Scanner(System.in);
     int input_n;
     long sum_m=0;
     long sum_n=0;
     
     while(read.hasNext())
     {
      input_n=read.nextInt();
      if(0==input_n)break;
      sum_n=0;
      sum_m=0;
      
      for(int q=1; q<input_n; q++)
      {
          if(input_n%q==0) sum_n+=q;
      }
      
      if(sum_n==input_n)    System.out.println("="+sum_n);
      
      else
      {
          sum_m=0;
          for(int q=1; q<sum_n; q++)
          {
              if(sum_n%q==0) sum_m+=q;
          }
          if(sum_m==input_n)    System.out.println(sum_n);
          else System.out.println("0");
      }
     }
    }
}

沒有留言 :