题目没有任何输入。
输出2到60之间所有“完数”和“盈数”,并以如下形式输出: E: e1 e2 e3 ......(ei为完数) G: g1 g2 g3 ......(gi为盈数) 其中两个数之间要有空格,行尾不加空格。
无
按题目要求进行输出即可。
#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为盈数) 其中两个数之间要有空格,行尾不加空格。
#define _CRT_SECURE_NO_WARNINGS #include<cstdio> #include<vector> using namespace std; int main() { vector<int> wanshu; vector<int> yingshu; for (int i = 2; i <= 60; i++) { vector<int> yinshu; for (int j = 1; j < i; j++) { if (i % j == 0) yinshu.push_back(j); } int sum=0; for (int m = 0; m < yinshu.size(); m++) { sum += yinshu[m]; } if (sum == i) wanshu.push_back(i); else if (sum > i) yingshu.push_back(i); } printf("E:"); for (int i = 0; i < wanshu.size(); i++) { printf(" %d", wanshu[i]); } printf("\nG:"); for (int i = 0; i < yingshu.size(); i++) { printf(" %d", yingshu[i]); } }
#include <bits/stdc++.h> using namespace std; int isEnum(int n){ int ans=0; for(int i=sqrt(n);i>1;i--){ if(n%i==0){ ans=ans+i+(i!=n/i? n/i:0); } } if(ans+1==n) return 1; else if(ans+1>n) return 2; else return 3; } void print(int a[],int len){ for(int i=0;i<len;i++) cout<<' '<<a[i]; } int main() { int a[60]={0},b[60]={0},cnta=0,cntb=0; for(int i=2;i<=60;i++){ switch(isEnum(i)){ case 1: a[cnta++]=i; break; case 2: b[cntb++]=i; break; default: break; } } cout<<"E:"; print(a,cnta); cout<<endl; cout<<"G:"; print(b,cntb); }
#include <stdio.h> int Sum(int x){ int sum = 0; for(int i = 1; i < x; i++){ if(x % i == 0){ sum += i; } } return sum; } int main(){ int e[60] = {0}, g[60] = {0}; int j1 = 0, j2 = 0; for(int i = 2; i <= 60; i++){ if(Sum(i) == i){ e[j1++] = i; }else if(Sum(i) > i){ g[j2++] = i; } } printf("E: "); for(int i = 0; i < j1; i++){ printf("%d", e[i]); if(i != j1 - 1){ printf(" "); } } printf("\n"); printf("G: "); for(int i = 0; i < j2; i++){ printf("%d", g[i]); if(i != j2 - 1){ printf(" "); } } printf("\n"); return 0; }
//单独写一个函数判断完数/盈数,返回1代表完数,返回-1代表盈数 #include <iostream> #include <cstdio> #include <vector> using namespace std; int isPerfectNumber(int x){ int sum=0; for(int i=2;i*i<=x;i++){ if(x%i==0){ sum+=i; if(x/i!=i) sum+=x/i; } } if(sum+1==x) return 1; else if(sum+1>x) return -1; else return 0; } int main(){ vector<int> perfect,abundant; for(int i=2;i<=60;i++){ if(isPerfectNumber(i)==1) perfect.push_back(i); else if(isPerfectNumber(i)==-1) abundant.push_back(i); } vector<int>::iterator item1,item2; printf("E:"); for(item1=perfect.begin();item1<perfect.end();item1++) printf(" %d",*item1); printf("\nG:"); for(item2=abundant.begin();item2<abundant.end();item2++) printf(" %d",*item2); return 0; }
#include<iostream> (720)#include<cstdio> #include<vector> using namespace std; vector<int> numberE; vector<int> numberG; int Sum(int x){ int sum =0; for(int i = 1;i < x;i ++){ if(x % i == 0){ sum += i;} } return sum; }//因子之和函数Sum; int main(){ for(int i = 2;i <= 60;i++){ if(i == Sum(i)){ numberE.push_back(i); } else if(i < Sum(i)){ numberG.push_back(i); } }//已经都加到向量里了; printf("E:"); for(int i = 0;i < numberE.size();i ++){ printf(" %d",numberE[i]); } printf("\n"); printf("G:"); for(int i = 0;i < numberG.size();i ++){ printf(" %d",numberG[i]); } printf("\n"); return 0; }先整了一个求因子之和的函数,然后判断
#include<iostream> (720)#include<set> #include<algorithm> using namespace std; set<int>solve(int n){ set<int>res; res.insert(1); for(int i=2;i*i<=n;i++){ if(n%i==0){ res.insert(i); res.insert(n/i); } } return res; } int main(){ vector<int>e; vector<int>g; for(int i=2;i<=60;i++){ set<int>res=solve(i); int ans=0; for(auto v:res){ ans+=v; } if(ans==i){ e.push_back(i); }else if(ans>i){ g.push_back(i); } } cout<<"E: "; for(int i=0;i<e.size()-1;i++){ cout<<e[i]<<" "; } cout<<e[e.size()-1]<<endl; cout<<"G: "; for(int i=0;i<g.size()-1;i++){ cout<<g[i]<<" "; } cout<<g[g.size()-1]<<endl; return 0; }
#include <stdio.h> #include <stdlib.h> int is_relative(int, int); int main() { int i; int e[60] = {0}, g[60] = {0}; int len1 = 0, len2 = 0; for(i = 3; i <= 60; i++) { int sum = 1, temp, start = 2;//必有因数1 while((temp = is_relative(i, start)) != 0) { sum += temp; start = temp + 1; } if(sum == i) { e[len1] = i; len1++; } else if(sum > i) { g[len2] = i; len2++; } } printf("E:"); for(i = 0; i < len1; i++) { printf(" %d", e[i]); } printf("\nG:"); for(i = 0; i < len2; i++) { printf(" %d", g[i]); } putchar(10); return 0; } int is_relative(int n, int start) { for(int i = start; i < n; i++) { if(n % i == 0) return 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> #include<cstdio> #include<vector> using namespace std; vector<int> numberE; vector<int> numberG; int Sum(int x){ int sum=0; for(int i=1;i<x;i++){ if(x%i==0) sum=sum+i; } return sum; } int main(){ for(int i=2;i<=60;i++){ if(i==Sum(i)){ numberE.push_back(i); } else if(i<Sum(i)){ numberG.push_back(i); } } cout<<"E:"; for(int i=0;i<numberE.size();i++) cout<<" "<<numberE[i];//注意空格在前 cout<<endl; cout<<"G:"; for(int i=0;i<numberG.size();i++) cout<<" "<<numberG[i]; cout<<endl; return 0; }
#include <iostream> (720)#include <cstdio> #include <cstring> using namespace std; int arrE[59]; int arrG[59]; int SoF(int n) { int sum = 0; for(int i = 1; i <= n / 2; i++) { if(n % i == 0) sum += i; } return sum; } int main() { int iE = 0; int iG = 0; memset(arrE, 0, sizeof(arrE)); memset(arrG, 0, sizeof(arrG)); for(int n = 2; n <= 60; n++) { if(SoF(n) == n) { arrE[iE] = n; iE++; } if(SoF(n) > n) { arrG[iG] = n; iG++; } } printf("E:"); for(int i = 0; i < 59; i++) { if(arrE[i] == 0) break; printf(" %d", arrE[i]); } printf("\nG:"); for(int i = 0; i < 59; i++) { if(arrG[i] == 0) break; printf(" %d", arrG[i]); } return 0; }
#include <cstdio> #include <vector> using namespace std; vector<int> E,G; void fun(int n,vector<int> &num){ for(int i=1;i<n;i++){ if(n%i==0){ num.push_back(i); } } } int add(vector<int> num){ int sum=0; for(int i=0;i<num.size();i++){ sum+=num[i]; } return sum; } int main(){ for(int i=2;i<=60;i++){ vector<int> num; int sum=0; fun(i,num); sum=add(num); if(sum==i){ E.push_back(i); } else if(sum>i){ G.push_back(i); } else{ continue; } } printf("E:"); for(int i=0;i<E.size();i++){ printf(" %d",E[i]); } printf("\nG:"); for(int j=0;j<G.size();j++){ printf(" %d",G[j]); } return 0; }
#include <stdio.h> int main() { int a[60],b[60],sum,k=0,l=0; for(int i=2;i<=60;i++) { sum=0; for(int j=1;j<=(i/2);j++)if(i%j==0)sum+=j; if(sum==i)a[k++]=i; else if(sum>i)b[l++]=i; } printf("E:"); for(int i=0;i<k;i++)printf(" %d",a[i]); printf("\nG:"); for(int i=0;i<l;i++)printf(" %d",b[i]); }
#include <iostream> #include <cstdio> #include <vector> using namespace std; int func(int x){ int sum = 0; for (int i = 1; i < x; ++i) { if (x % i == 0) { sum += i; } } if (sum == x) { return 1; //如果是完数返回1 } else if (sum > x) { return 2; //如果是盈数返回2 } return 0; //都不是完数返回0 } int main(){ vector<int> wanInt; vector<int> yingInt; for (int i = 3; i < 61; ++i) { int k = func(i); if (k == 1) { wanInt.push_back(i); } else if (k == 2) { yingInt.push_back(i); } } printf("E:"); for (int j = 0; j < wanInt.size(); ++j) { printf(" %d", wanInt[j]); } printf("\n"); printf("G:"); for (int l = 0; l < yingInt.size(); ++l) { printf(" %d", yingInt[l]); } printf("\n"); return 0; }
选择j<8是因为8*8=64>60。
#include int main(){ int E[60] = {0}, G[60] = {0}; int i, sum, j, div, mod; for(i=2; i<61; i++){ sum = 0; for(j=2; j<8; j++){ mod = i % j; div = i / j; if(div < j) break; if(mod == 0){ if(div == j) sum += div; else sum += (div + j); } } sum += 1; if(sum == i) E[++E[0]] = i; else if(sum > i) G[++G[0]] = i; } printf("E:"); for(j=1; j<=E[0]; j++) printf(" %d",E[j]); printf("\n"); printf("G:"); for(j=1; j<=G[0]; j++) printf(" %d",G[j]); printf("\n"); }