1 solutions

  • 0
    @ 2025-11-5 17:28:35

    C :

    #include<stdio.h>
    int iswanshu(int n)
    {
    	int s = 1,i;
    	if(n%2)
    	return 0; 
    	for(i = 2;i * i <= n;i++)
    	{
    		if(n%i)
    		continue;
    		else
    		s += (i + n/i);
    	}
    	if(s == n)
    	return 1;
    	else
    	return 0;
    }
    int main()
    {
    	int n,i;
    	while((scanf("%d",&n))!=EOF)
    	{
    		if(n < 6)
    		break;
    		else
    		printf("%d:",n);
    		for(i = 2;i <= n;i++)
    		if(iswanshu(i))
    		printf(" %d",i);
    		printf("\n"); 
    	}
    	return 0;
    }
    

    C++ :

    #include<fstream>
    #include<iostream>
    #include<vector>
    using namespace std;
    
    int main()
    {
    	//ifstream cin("1.txt");
    	//ofstream cout("2.txt");
    	
    	vector<int> a;
    	// 求出所有完数 
    	// 10000 - 100000之间不存在完数 
    	for(int i = 2; i < 10000; i += 2) {
    		int sum = 1;
    		for(int j = 2; j <= i/2; j++) {
    			if(i%j == 0) sum = sum + j;
    		}
    		if(sum == i) a.push_back(i);
    	}
    	
    	int n;
    	while(cin >> n) {
    		cout << n << ":";
    		for(int i = 0; i < a.size(); i++) {
    			if(a[i] <= n) cout << " " << a[i];
    		}
    		cout << endl;
    	} 
    	 
    	
    	return 0;
    }
    
    • 1

    Information

    ID
    18466
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    (None)
    # Submissions
    0
    Accepted
    0
    Uploaded By