#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;
srand(time(NULL));
for(num=1;num<100000000;num+=1) {
sum=0;
j=0;
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 {
}
}
}
return 0;
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
2차원 shuffle (0) | 2014.02.18 |
---|---|
Dijkstra's algorithm (0) | 2013.12.16 |
유사완전수,괴짜수 (0) | 2013.12.01 |
힙정렬 (0) | 2013.11.11 |
간단한 연결리스트 (0) | 2013.10.28 |