题目没有任何输入。
输出2到60之间所有“完数”和“盈数”,并以如下形式输出: E: e1 e2 e3 ......(ei为完数) G: g1 g2 g3 ......(gi为盈数) 其中两个数之间要有空格,行尾不加空格。
无
按题目要求进行输出即可。
def judge(n):
res = []
for i in range(1, n):
if n % i == 0: res.append(i)
return sum(res) - n
E, G = [], []
for i in range(2, 61):
if judge(i) > 0:
G.append(str(i))
elif judge(i) == 0:
E.append(str(i))
print("E: " + " ".join(E))
print("G: " + " ".join(G))
//AC代码,但求因子应该有更好地方法 #include <iostream> #include <vector> #include <math.h> using namespace std; int main(){ vector<int> a,b; int i; for(int num=2;num<=60;num++){ int sum=1; for(i=2;i<num;i++){ if(num%i==0){ sum+=i; } } if(sum==num) a.push_back(num); else if(sum>num) b.push_back(num); } cout<<"E: "; for(i=0;i<a.size()-1;i++) cout<<a[i]<<" "; cout<<a[a.size()-1]<<endl; cout<<"G: "; for(i=0;i<b.size()-1;i++) cout<<b[i]<<" "; cout<<b[b.size()-1]<<endl; return 0; }
#include<stdio.h> #include<math.h> int judge(int n) { int i; int num=0; for(i=1;i<n;i++) { if(n%i==0) num+=i; } if(num==n) return 1; else if(num>n) return 2; else return 0; } int main() { int i,k; int a[60]; int r=0,t=59; for(i=2;i<=60;i++) { k=judge(i); if(k==1) a[r++]=i; if(k==2) a[t--]=i; } printf("E:"); for(i=0;i<r;i++) printf(" %d",a[i]); printf("\nG:"); for(i=59;i>t;i--) printf(" %d",a[i]); return 0; }
#include<iostream> using namespace std; #include<vector> /*完数与盈数*/ int main() { vector<int> E, G; for (int i = 2; i <= 60; i++) { int sum = 0; for (int j = 1; j < i; j++)//因子 if (i % j == 0) sum += j; if (sum == i) E.push_back(i); else if(sum > i) G.push_back(i); } //输出 vector<int>::iterator it; cout << "E:"; for ( it = E.begin(); it != E.end(); it++) cout << " "<< *it; cout << endl; cout << "G:"; for (it = G.begin(); it != G.end(); it++) cout << " "<< *it ; return 0; }
import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList<Integer> g = new ArrayList<>(); ArrayList<Integer> e = new ArrayList<>(); for (int i = 2; i <= 60; i++) { int sum=0; for (int j = 1; j < i; j++) if (i%j==0) sum+= j; if (sum==i) e.add(i); else if (sum>i) g.add(i); } System.out.print("E: "); for (Integer i : e) System.out.print(i+" "); System.out.println(); System.out.print("G: "); for (Integer i : g) System.out.print(i+" "); } }
#include<bits/stdc++.h>
int main(){
int a[61]={0};
for(int i=2;i<61;i++){
int l=sqrt(i),sum=0;
for(int j=1;j<=l;j++)
if(i%j==0)
sum=sum+j+i/j;
if(i==l*l) sum=sum-l;
if(sum>2*i) a[i]=1;
else if(sum==2*i) a[i]=2;
}
printf("E: ");
for(int i=2;i<61;i++)
if(a[i]==2)
printf("%d ",i);
printf("\n");
printf("G: ");
for(int i=2;i<61;i++)
if(a[i]==1)
printf("%d ",i);
printf("\n");
}
def getFactorSum(num): result = 0 for i in range(num//2,0,-1): if num % i == 0: result += i return result for i in range(2, 61): if getFactorSum(i) == i: e.append(i) elif getFactorSum(i) > i: g.append(i) print('E: ', end="") print(' '.join(map(str, e))) print('G: ', end="") print(' '.join(map(str, g)))
#include<iostream> using namespace std; int main() { int a[61]; fill(a,a+61,0); for(int i=2;i<61;i++) { int sum=1; for(int j=2;j<i;j++) { if(i%j==0) sum+=j; } if(sum==i) a[i]=1; if(sum>i) a[i]=2; } cout<<"E:"; for(int i=2;i<61;i++) { if(a[i]==1) cout<<' '<<i; } cout<<endl<<"G:"; for(int i=2;i<61;i++) { if(a[i]==2) cout<<' '<<i; } }
#include<iostream> #include<math.h> #include<vector> using namespace std; int perfect(int n) { int sum = 1; for(int i = 2; i <= sqrt(n); i++) { if((n % i == 0) && (i * i != n)) { sum = sum + i + n / i; } if(n % i == 0 && i * i == n) { sum = sum + i; } } return sum; } int main() { vector<int> v1, v2; for(int i = 2; i <=60; i++) { if(perfect(i) == i) v1.push_back(i); if(perfect(i) > i) v2.push_back(i); } cout << "E: "; for(int i = 0; i < v1.size() - 1; i++) cout << v1[i] << " "; cout << v1[v1.size()-1] << endl; cout << "G: "; for(int i = 0; i < v2.size() - 1; i++) cout << v2[i] << " "; cout << v2[v2.size()-1] << endl; return 0; }
可惜java没有c++的vector轻便
package com.speical.first;
/**
* 完数和盈数
*
* @author special
* @date 2017年12月22日 下午10:59:03
*/
public class Pro19 {
public static int check(int num){
int sum = 1;
for(int i = 2; i <= Math.sqrt(num); i++){
if(num % i == 0){
sum += i;
if(num / i != i){
sum += num / i;
}
if(sum > num){
return 1;
}
}
}
if(sum == num) return 0;
else return -1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] E = new int[60];
int[] G = new int[60];
int indexE = 0;
int indexG = 0;
for(int i = 2; i <= 60; i++){
if(check(i) == 0){
E[indexE++] = i;
}else if(check(i) == 1){
G[indexG++] = i;
}
}
System.out.print("E:");
for(int i = 0; i < indexE; i++){
System.out.print(" " + E[i]);
}
System.out.print("\nG:");
for(int i = 0; i < indexG; i++){
System.out.print(" " + G[i]);
}
System.out.println();
}
}
package NiuKeBianMa;
import java.util.ArrayList;
import java.util.List;
public class Main40 {
public static boolean wan(int n) {
List list =new ArrayList();
for(int i=1;i<n;i++) {
if(n%i==0) {
list.add(i);
}
}
int count =0;
for(int i:list) {
count+=i;
}
if(n==count) {
return true;
}
return false;
}
public static boolean ying(int n) {
List list =new ArrayList();
for(int i=1;i<n;i++) {
if(n%i==0) {
list.add(i);
}
}
int count =0;
for(int i:list) {
count+=i;
}
if(n<count) {
return true;
}
return false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
List list = new ArrayList();
List list2 = new ArrayList();
for (int i = 2; i <= 60; i++) {
if (wan(i) == true) {
list.add(i);
} else if (ying(i) == true) {
list2.add(i);
}
}
System.out.print("E: ");
for (int i = 0; i < list.size() - 1; i++) {
System.out.print(list.get(i) + " ");
}
System.out.println(list.get(list.size() - 1));
System.out.print("G: ");
for (int i = 0; i < list2.size() - 1; i++) {
System.out.print(list2.get(i) + " ");
}
System.out.print(list2.get(list2.size() - 1));
}
}
#include<iostream> #include<cstdio> #include<vector> using namespace std; // 判断一个数是否为完数 // return 1 : 完数 // return 0 : 盈数 // return -1: 其他 int solve(int num) { int sum = 0; for(int i = 1; i < num; ++i) { if(num % i == 0) { sum += i; } } if(sum == num) { return 1; // 相等为完数 } if(sum > num) { return 0; // 大于为盈数 } return -1; // 其他情况 } int main() { vector<int> ve; // 完数 vector<int> vg; // 盈数 // 判断2 - 60 for(int i = 2; i <= 60; ++i) { if(solve(i) == 1) { ve.push_back(i); // 完数 } else if(solve(i) == 0) { vg.push_back(i); // 盈数 } } // 输出 cout << "E: "; for(int i = 0; i < ve.size(); ++i) { if(i != 0) { cout << " "; } cout << ve[i]; } cout << endl; cout << "G: "; for(int i = 0; i < vg.size(); ++i) { if(i != 0) { cout << " "; } cout << vg[i]; } return 0; }
#include<stdio.h>//找到除掉本身的因子相加,判断是否等于本身 int main() { int w=0,y=0,i,j,E[60],G[60],yinzihe[60]; for(i=2;i<=60;i++)//1-60被除数 { yinzihe[i]=0; for(j=1;j<i;j++)//除数不包含i if(i%j==0)//是因子 yinzihe[i]+=j;//被除数的因子和 if(yinzihe[i]==i) { E[w]=i; w++;//完数下标 } if(yinzihe[i]>i) { G[y]=i; y++;//盈数下标 } } printf("E: ");//输出 for(i=0;i<w;i++) printf("%d ",E[i]); printf("\nG: "); for(i=0;i<y;i++) printf("%d ",G[i]); }
#include<iostream> using namespace std; int main(){ int e[60],g[60]; int eflag=0,gflag=0; for(int n=2;n<=60;n++){ int i,sum=1; for( i=2;i*i<n;i++){ if(n%i==0){ sum=sum+i+n/i; } } if(i*i==n){ sum+=i; } if(n==sum){ e[eflag++]=n; } else if(sum>n){ g[gflag++]=n; } } cout<<"E:"; for(int i=0;i<eflag;i++){ cout<<" "<<e[i]; } cout<<endl; cout<<"G:"; for(int i=0;i<gflag;i++){ cout<<" "<<g[i]; } }
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <string> #include <vector> using namespace std; vector<int> E; vector<int> G; int sum(int x); int main(){ for (int i = 2; i <=60; i++) { if (i == sum(i)) { E.push_back(i); } if (i < sum(i)) { G.push_back(i); } } printf("E:"); for (int i = 0; i < E.size(); i++){ printf(" %d", E[i]); } printf("\n"); printf("G:"); for (int i = 0; i < G.size(); i++){ printf(" %d", G[i]); } return 0; } int sum(int x){ int sum = 0; for (int i = 1; i < x; i++){ if (x % i == 0) { sum += i; } } return sum; }