切換
舊版
前往
大廳
主題

[創作|作業][C++]演算法Week1:3-perfect number

極巨龍神塔奇 | 2018-03-25 00:18:43 | 巴幣 2 | 人氣 1034

完美數
完美數的定義為:某一個數 n 等於自己以外的正因數的總和,則稱 n 為完美數。
例如:
6 除了 6 本身的正因數有 1, 2, 3
且 1 + 2 + 3 = 6,則 6 就是一個完美數
請寫一個程式來判斷輸入的資料是否為完美數,並將輸入資料中為完美數的部分輸出。
Input
資料格式如下:
第一個數字為待測的資料個數
例如以下範例中第一個數字為 10,則表示後面有 10 筆資料需要讀入
Output
而輸出部分只需印出檢測結果為完美數的數字就好
輸入與輸出方式皆為console讀入/印出
例如 C++ 中的 cin / cout,而非讀檔寫檔
另外 Input 的大小可能會達 9 位數
範例輸入:
10
2 3 28 4 7 9 13 6 27 65536
範例輸出:
28 6


/*----- ----- ----- -----*/
//3-perfect number
//Made by 105502555 Teemo Hsu(Synasaivaltos)
//Date: 2018/03/15
/*----- ----- ----- -----*/
#include <iostream>
#include <cmath>
#include <vector>

using namespace std;

int main(void)
{
   int n;
   cin >> n;
   vector<int> ans;

   while(--n>=0)
   {
      int a,i=0,sum=0;
      cin >> a;
      while(++i<=(int)sqrt(a))
      {
         int b=a/i;
         sum=(a==b*i?sum+i+b:sum);
      }
      if(a*2==sum)
         ans.push_back(sum-a);
   }

   for(int i=0;i<ans.size();cout<<ans.at(i)<<((i!=ans.size()-1)?" ":""),i++);

   return 0;
}
送禮物贊助創作者 !
0
留言

創作回應

更多創作