import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()){ int n = scanner.nextInt(); for (int i = 1; i <= n; i++) { int sum = 0; for (int j = 1; j < i; j++) if (i%j==0) sum+= j; if (sum==i) System.out.print(i+" "); } System.out.println(); } } }
#include<iostream> #include<algorithm> using namespace std; bool perfect(int n) { int* a = new int[n]; int count = 0, total = 0; for (int i = 1; i <= sqrt(n); i++) if (n%i == 0) { a[count++] = i; a[count++] = n / i; } for (int i = 0; i<count; i++) total += a[i]; total -= n; if (n == (int)sqrt(n)*(int)sqrt(n)) total -= (int)sqrt(n); if (total == n) return 1; else return 0; } int main() { int n; while (cin >> n) { int* record = new int[n]; int num = 0; for (int i = 1; i <= n; i++) { if (perfect(i)) record[num++] = i; } for (int i = 0; i<num - 1; i++) cout << record[i] << " "; cout << record[num-1] << endl; } }
方法一:欧几里得完美数理论,如果p是质数,且2^p-1也是质数,那么(2^p-1)X2^(p-1)便是一个完全数。
#include<stdio.h> int main (){//the shorter,the better. int n,i,j,s,t[1000]; for(;~scanf("%d",&n);){ for (t[0]=0,j=2;j<=n;s==j?(t[++*t]=j):0,j++) for (s=1,i=2;i*i<=j;s+=j%i?0:i+j/i,i++); for (i=1;i<=*t;printf(i==*t?"%d\n":"%d ",t[i]),i++); } }
#include <stdio.h> bool Judge(int x) { int sum=0; for(int i=1; i<x; i++) { if(x%i==0) sum+=i; } return x==sum; } int main() { int n; while(scanf("%d", &n)!=EOF) { bool isfirst=true; for(int i=1; i<=n; i++) { if(Judge(i)==true) { if(isfirst) { printf("%d", i); isfirst=false; } else printf(" %d", i); } } printf("\n"); } return 0; }
#include <iostream> #include <sstream> #include <string> using namespace std; int main() { int n; while (cin >> n) { stringstream sstream; for (int i = 1; i <= n; i++) { int sum = 0; for (int j = 1; j <= i / 2; j++) { if (i % j == 0) { sum += j; } } if (sum == i) { sstream << i << " "; } } string str; getline(sstream, str); str = str.substr(0, str.size() - 1); //去掉行尾空格 cout << str << endl; } return 0; }
#include <stdio.h> int iswangshu(int m){//判断是否为完数 int n; int sum=0; for(int i=1;i<m;i++){ if(m%i==0){ sum+=i; } } if(sum==m){ return 1; } else { return 0; } } int main(void) { int s=0; scanf("%d",&s); for(int n=1;n<=s;n++){ if(iswangshu(n)){ printf("%d ",n); } } return 0;
#include <cstdio> int Sum(int n){ //求因子之和 int sum = 0; for(int i = 1; i < n; ++i){ //n的因子不包括n自身 if(n%i == 0){ // i是n的因子 sum += i; // 累加 } } return sum; } int main(){ int n; while(scanf("%d",&n) != EOF){ for(int i = 3; i <= n; ++i){ if(Sum(i) == i){ printf("%d ",i); } } printf("\n"); } return 0; }
#include <iostream> using namespace std; bool func(int n){//判断是否是完数 int sum=0; for(int i=1;i<=n/2;i++){ if(n%i==0) sum+=i; } return sum==n; } int main() { int n; while(cin>>n){ bool first=true;//控制输出的第一个数前面没空格 for(int i=1;i<=n;i++){ if(func(i)){ if(first){ first=false; } else{ cout<<" "; } cout<<i; } } cout<<endl; } }
#include <stdio.h> int main() { int n, a[100], k = 0; scanf("%d", &n); for(int i = 1; i <= n; i ++){ int sum = 0; for(int j = 1; j <= i/2; j ++){ if(i%j==0){ sum += j; } } if(sum == i){ a[k ++] = i; } } for(int i = 0; i < k; i ++){ printf("%d%c", a[i], i==k-1?'\n':' '); } return 0; }
#include<iostream> #include<stdio.h> #include<cmath> using namespace std; void print(int x) { int counter=0; cout<<x<<" is ... of "; for(int j=1;j<x;j++) if(x%j==0) { counter++; if(counter==1) cout<<j; else cout<<","<<j; } cout<<endl; } int main() { int sum=0; for(int i=1;i<=1000;i++) { sum=0; for(int j=1;j<i;j++) if(i%j==0) sum+=j; if(sum==i) {print(i); } } return 0; }
#include <iostream> using namespace std; bool Judge(int num) { int sum = 0; for (int i = 1 ; i < num ; i++) { if (num % i == 0) sum += i; } if (sum == num) return true; else return false; } int main() { int n; cin >> n; for (int i = 1 ; i <= n ; i++) { if (Judge(i)) cout << i << " "; } return 0; }
#include<iostream> #include<cstdio> using namespace std; int main() { int n; cin >> n; bool first = true; for(int i = 1; i <= n; ++i) { int sum = 0; for(int j = 1; j <= i / 2; ++j) { if(i % j == 0) sum += j; } if(sum == i) { if(first == true) { first = false; cout << i; } else { cout << " " << i; } } } return 0; }
#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> using namespace std; bool func(int x) { int sum = 1; int q = sqrt(x); for(int i = 2; i < q; i++){ if(x % i == 0){ sum += i; sum += x / i; } } if(x % q == 0){ if(q * q == x){ sum += q; } else{ sum += q; sum += x / q; } } if(sum == x){ return true; } return false; } int main() { int n; while(cin>>n){ vector<int> res; for(int i =2; i < n; i++){ if(func(i)){ res.push_back(i); } } cout<<res[0]; for(int i = 1; i < res.size(); i++){ cout<<" "<<res[i]; } cout<<endl; } return 0; }