#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int a[4000]={0,};
int sfl[4000]={0,};
int i, j=0, num;
int sum=0, n, x, y, z, t;
printf("숫자를 입력하시오: ");
scanf("%d", &num);
srand(time(NULL));
for(i=1;i<=num/2;i+=1) {
if(num%i==0) {
a[j]=i;
j+=1;
}
}
// num보다 작은 약수의 갯수
n=j;
for(i=0;i<n;i+=1) {
printf("%d ", a[i]);
sum+=a[i];
}
printf("\n");
if(sum<=num) {
printf("입력된 수 %d는 유사완전수가 아닙니다.\n", num);
} else {
for(i=0;i<n;i+=1) {
sfl[i]=i;
}
for(z=0;z<10000000;z+=1) {
for(j=0;j<n;j+=1) {
x=rand()%n;
y=sfl[j];
sfl[j]=sfl[x];
sfl[x]=y;
}
sum=0;
i=0;
while(sum<num) {
sum+=a[sfl[i]];
i+=1;
}
if(sum==num) break;
}
if(z==10000000) {
printf("%d는 유사완전수가 아닙니다.(괴짜수입니다)\n", num);
} else {
printf("%d는 유사완전수입니다.\n", num);
printf("근거: ");
y=i;
for(i=0;i<y-1;i+=1) {
x=i;
for(j=i+1;j<y;j+=1) {
if(sfl[x]>sfl[j]) x=j;
}
t=sfl[i];
sfl[i]=sfl[x];
sfl[x]=t;
}
for(i=0;i<y;i+=1) {
printf("%d ", a[sfl[i]]);
}
}
}
return 0;
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
Dijkstra's algorithm (0) | 2013.12.16 |
---|---|
괴짜수(weird number) 출력하기 (0) | 2013.12.02 |
힙정렬 (0) | 2013.11.11 |
간단한 연결리스트 (0) | 2013.10.28 |
n보다 작은 소수 출력하기 (0) | 2013.10.26 |