列出完數的一個題目問下
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 1024kB
描述
自然數中,完數寥若晨星,請在從1 到某個整數范圍中打印出所有的完數來。所謂“完數”是指一個數恰好等於它的所有不同因子之和。例如,6 是完數,因為6=1+2+3。而24不是完數,因為24≠ +2+3+4+6+8+12(=36)。
輸入
輸入數據中含有一些整數n(1
輸出
對於每個整數n,輸出所有不大於n 的完數。每個整數n 的輸出由n 引導,跟上冒號,然後是由空格開道的一個個完數,每個n 的完數列表應占獨立的一行。
樣例輸入
100
5000
0
樣例輸出
100: 6 28
5000: 6 28 496
————————————————————————————————
我寫的代碼一直沒辦法accept
————————————————————————————
#include “stdio.h”
#include "math.h"
int main()
{
long long int sum=1;
int i,j,k;
char ch;
int count=0;
long long int b[100];
for(i=1;i<=12;i++)
{
sum*=i;
}
while(scanf("%ld",&b[i])==1)
{
if((ch=getchar())==EOF)
{
break;
}
i++;
}
for(j=0;j<i;j++)
for(k=j+1;k<i;k++)
{
if(b[k]*b[j]==sum)
{
count++;
}
}
printf("%d",count);
return 0;
}——————————————————————
不知道怎麼改好。。。
題目網址。。
——————————————
http://jmu.openjudge.cn/stl/T2/
——————————————————————
#include <cstdlib>
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
const int MAX = 10000;
int main(int argc, char *argv[])
{
vector<int> vec;
for(int i=2; i<MAX; i++)
{
int sum = 0;
for(int j=1; j<=i/2; j++)
{
if(i % j ==0)
sum += j;
}
if(sum == i)
vec.push_back(i);
}
int n;
while(cin >> n)
{
cout << n <<":";
int count = vec.size();
for(int i=0; i<count; i++)
{
if(vec[i] <= n)
cout << " " << vec[i];
else
break;
}
cout << endl;
}
return EXIT_SUCCESS;
}