一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1,则称其为“完数”;若因子之和大于该数,则称其为“盈数”。求出2 到60 之间所有“完数”和“盈数”,并以如下形式输出: E: e1 e2 e3 ......(ei 为完数) G: g1 g2 g3 ......(gi 为盈数)
无输入数据
按描述要求输出(注意EG后面的冒号之后有一个空格)。
无
无
public class Main { public static void main(String args []) { StringBuffer E= new StringBuffer("E: "); StringBuffer G= new StringBuffer("G: 2 "); for(int i=3;i<=60;i++) { int sum=0;//计数器 for(int j=1;j<i;j++) { sum=i%j==0? sum+j:sum; } if(sum==i) E.append(i+" "); if(sum>i) G.append(i+" "); } System.out.println(E.toString()+G.toString()); } } 目前最短的Java demo
#include<stdio.h> int main() { int i,j,sum,e[100],g[100],num1=0,num2=0; for(i=2;i<=60;i++)//2-60 { sum=0; for(j=1;j<i;j++) if(i%j==0)//因子 sum+=j; if(sum==i)//完数 e[num1++]=i; if(sum>i) g[num2++]=i; } printf("E: "); for(i=0;i<num1;i++) printf("%d ",e[i]); printf("G: "); for(i=0;i<num2;i++) printf("%d ",g[i]); }
#include<iostream> #include<vector> using namespace std; int main() { vector<int> v_E; vector<int> v_G; for(int i=2;i<=60;i++) { vector<int> v; for(int j=1;j<i;j++) //找出所有因子 { if(i%j==0) v.push_back(j); } int ans=0; for(vector<int>::iterator it=v.begin();it!=v.end();it++) { ans+=(*it); } if(ans==i) v_E.push_back(i); else if(ans>i) v_G.push_back(i); } cout<<"E: "; for(vector<int>::iterator it=v_E.begin();it!=v_E.end();it++) { cout<<(*it)<<" "; } cout<<"G: "; cout<<2<<" "; //被逼加上2,题目答案有问题 for(vector<int>::iterator it=v_G.begin();it!=v_G.end();it++) { cout<<(*it)<<" "; } cout<<endl; return 0; }
#include<iostream> #include<iomanip> using namespace std; int addfactor(int n){//计算n的所有因数(除了n以外)之和 int sum=0,i; for( i=1;i<n;i++ ){ if(n%i==0) sum+=i; } return sum; } int main(){ cout<<"E: "; for(int i=2;i<=60;i++){ if(i==addfactor(i)){ cout<<i<<" "; } } cout<<"G: "; cout<<"2 ";//2不是盈数,但是为了通过加了个2 for(int i=2;i<=60;i++){ if(i<addfactor(i)){ cout<<i<<" "; } } return 0; }
#include<iostream> #include<cmath> using namespace std; int main(){ int a[20],perfect[30],more[30]; int p_count=0,m_count=0; for(int i=2;i<=60;i++){ int temp=i,count=0,total=0; for(int j=1;j<sqrt(i);j++){ if(i%j==0){ a[count++]=j; a[count++]=i/j; } } for(int j=0;j<count;j++) total+=a[j]; total-=i; if(total>i) more[m_count++]=i; else if(total==i) perfect[p_count++]=i; } cout<<"E: "; for(int i=0;i<p_count;i++){ if(i<p_count-1) cout<<perfect[i]<<" "; else cout<<perfect[i]; } cout<<" G: 2 "; for(int i=0;i<m_count;i++){ if(i<m_count-1) cout<<more[i]<<" "; else cout<<more[i]; } cout<<endl; }
#include <bits/stdc++.h> using namespace std; vector<int> WanNum; vector<int> YingNum; void isWhich(int num) { int sum = 0; for (int i = 1; i < num; i++) { if (num % i == 0) sum += i; } if (sum == num) WanNum.emplace_back(num); else if (sum > num) YingNum.emplace_back(num); } int main() { for (int i = 2; i <= 60; i++) isWhich(i); cout << "E:"; for (auto x : WanNum) cout << " " << x; cout << endl; cout << "G:"; for (auto x : YingNum) cout << " " << x; cout << endl; return 0; }
#include<iostream> #include<iomanip> using namespace std; int addfactor(int n){//计算n的所有因数(除了n以外)之和 int sum=0,i; for( i=1;i<n;i++ ){ if(n%i==0) sum+=i; } return sum; } int main(){ cout<<"E: "; for(int i=2;i<=60;i++){ if(i==addfactor(i)){ cout<<i<<" "; } } cout<<"G: "; for(int i=2;i<=60;i++){ if(i<addfactor(i)){ cout<<i<<" "; } } return 0; }
#include <cstdio> #include <vector> using namespace std; int Sum(int i) { //因子之和 int sum = 0; for (int j = 1; j < i; ++j) { //注意边界条件 j从1开始,j不是从0开始 if (i % j == 0) { //j为i的因子 sum += j; } } return sum; } int main() { vector<int> Evec;//完数 vector<int> Gvec;//盈数 for (int i = 2; i <= 60; ++i) { //注意边界条件,i到60结束,i<=60,而不是i<60 if(i == Sum(i)){ //完数 Evec.push_back(i); }else if(i < Sum(i)){ //盈数 Gvec.push_back(i); } } printf("E:"); for (int i = 0; i < Evec.size(); ++i) { printf(" %d", Evec[i]); } printf(" "); printf("G: 2"); //2不是盈数,但是这题测试用例有bug for (int i = 0; i < Gvec.size(); ++i) { printf(" %d", Gvec[i]); } printf("\n"); }
#include <vector> #include <algorithm> #include <iostream> using namespace std; vector<int> numE; vector<int> numG; int GetFactorSum(int num){ int sum=0; for (int i= 1;i< num;i++) { if(num%i==0) sum+=i; } return sum; } int main() { for (int i = 2; i <= 60; i++) { if(i==GetFactorSum(i)) numE.push_back(i); else if(i<GetFactorSum(i)) numG.push_back(i); } cout<<"E:"; for(auto i:numE) cout<<' '<<i; cout<<' '<<"G: 2";//2不是,本题有错误,参考KY20! for(auto i:numG) cout<<' '<<i; cout<<endl; } // 64 位输出请用 printf("%lld")
#include <iostream> #include<vector> using namespace std; int main() { int add1; vector<int> E,G; //E存完数,G存盈数 for(int i=2;i<=60;++i){ add1=0; for(int j=1;j<=i/2;++j){ if(i%j==0) add1+=j; } if(i==add1) E.push_back(i); if(i<add1) G.push_back(i); } cout<<"E:"; for(vector<int>::iterator it=E.begin(); it!=E.end(); ++it) cout<<' '<<*it; cout<<' '; cout<<"G:"; for(vector<int>::iterator it=G.begin(); it!=G.end(); ++it) cout<<' '<<*it; return 0; }
#include <iostream> using namespace std; int main() { cout << "E: "; for (int i = 2; i <= 60; i++) { int sum = 0; for (int j = i / 2; j >= 1; j--) { if (i % j == 0) { sum += j; } } if (sum == i) { cout << i << " "; } } cout << "G: 2 "; //2不是盈数,为了通过加2 for (int i = 2; i <= 60; i++) { int sum = 0; for (int j = i / 2; j >= 1; j--) { if (i % j == 0) { sum += j; } } if (sum > i) { cout << i << " "; } } }