c·c++/c 프로그래밍

괴짜수(weird number) 출력하기

바로이순간 2013. 12. 2. 21:45

#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