题目没有任何输入。
输出2到60之间所有“完数”和“盈数”,并以如下形式输出: E: e1 e2 e3 ......(ei为完数) G: g1 g2 g3 ......(gi为盈数) 其中两个数之间要有空格,行尾不加空格。
无
按题目要求进行输出即可。
//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;
}
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));
}
}
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))
#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;
} #include<stdio.h>
#include<vector>
using namespace std;
int Sum(int a){
int sum=0;
for(int i=1;i<a;i++){
if(0==a%i){
sum=sum+i;
}
}
return sum;
}
int main(){
vector<int> Evec;
vector<int> Gvec;
for(int i=2;i<=60;i++){
if(Sum(i)==i){
Evec.push_back(i);
}
else if(Sum(i)>i){
Gvec.push_back(i);
}
}
printf("E:");
for(int i=0;i<Evec.size();i++){
printf(" %d",Evec[i]);
}
printf("\nG:");
for(int i=0;i<Gvec.size();i++){
printf(" %d",Gvec[i]);
}
}
//一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。
//输出2到60之间所有“完数”和“盈数”,并以如下形式输出:
//E: e1 e2 e3 ......(ei为完数)
//G: g1 g2 g3 ......(gi为盈数) 其中两个数之间要有空格,行尾不加空格。