ëŠ�ë‚€ì � ë°� 설명 ¶
�.. �기가 �기� 만� 시간� 약~~간 걸리긴 하지만..
ë�..풀어준다는..*^^*
ë¬¸ì œê°€ 있다면 ë¬¸ì œì—�서 요구하는 10^9까지는 무리...
ì†�ë�„를 위해서 ì €ë²ˆì—� 사용했ë�˜ 소스를 ë˜� ìš°ë ¤ë¨¹ê¸´ 했지만..
10^9��니.. 약 1TB.. �담� 아니�낫~>ㅃ<;;
ë�.. ì�´ëŸ°ì�´ìœ 로.. ì†�ë�„를 ë¬¸ì œë¡œ ì¡°ê±´ì�„ ë²„ë ¤ë²„ë¦°..불량ê°�ìž�소스가 ë�˜ì–´ë²„ë ¸ë‹¤ê³ ë‚˜..
ì–´ì¨‹ë“ ë¬¸ì œì—�서 필요한건 풀어내니 ë¬¸ì œëŠ” ì—†ë‹¤ê³ ë³¸ë‹¤~ 나름대로 빨리 í’€ì–´ë‚¸ë‹¤ê³ .ã…Ž
ë�..풀어준다는..*^^*
ë¬¸ì œê°€ 있다면 ë¬¸ì œì—�서 요구하는 10^9까지는 무리...
ì†�ë�„를 위해서 ì €ë²ˆì—� 사용했ë�˜ 소스를 ë˜� ìš°ë ¤ë¨¹ê¸´ 했지만..
10^9��니.. 약 1TB.. �담� 아니�낫~>ㅃ<;;
ë�.. ì�´ëŸ°ì�´ìœ 로.. ì†�ë�„를 ë¬¸ì œë¡œ ì¡°ê±´ì�„ ë²„ë ¤ë²„ë¦°..불량ê°�ìž�소스가 ë�˜ì–´ë²„ë ¸ë‹¤ê³ ë‚˜..
ì–´ì¨‹ë“ ë¬¸ì œì—�서 필요한건 풀어내니 ë¬¸ì œëŠ” ì—†ë‹¤ê³ ë³¸ë‹¤~ 나름대로 빨리 í’€ì–´ë‚¸ë‹¤ê³ .ã…Ž
소스 ¶
~cpp
#include <stdio.h>
#include <iostream>
unsigned int Sum_jari(unsigned int);
unsigned int Creat_base_and_process(unsigned int number);
unsigned int Get_right(unsigned int, unsigned int*);
const int MAX_NUMBER=10000000;
void main()
{
int number_simulation;
printf("테스트를 ì‹œí–‰í• íšŸìˆ˜ë¥¼ ìž…ë ¥í•˜ì„¸ìš”.\n>>");
scanf("%d",&number_simulation);
for (;number_simulation>0;--number_simulation)
{
unsigned int minimum_number;
printf ("\n숫ìž�를 ìž…ë ¥í•˜ì„¸ìš”.\n>>");
scanf("%d",&minimum_number);
printf("ê²°ê³¼ : %d\n",Creat_base_and_process(minimum_number+1));
}
}
unsigned int Get_right(unsigned int number, unsigned int* log_number)
{
unsigned int sum=0;
while (number>1)
{
if (1==log_number[number])
{
sum+=number;
break;
}
sum+=Sum_jari(log_number[number]);
number/=log_number[number];
}
return sum;
}
unsigned int Sum_jari(unsigned int number)
{
unsigned int sum=0;
while (number>0)
{
sum+=number%10;
number/=10;
}
return sum;
}
unsigned int Creat_base_and_process(unsigned int number)
{
unsigned int *log_number=(unsigned int*)malloc((MAX_NUMBER+2)*sizeof(unsigned int));
unsigned int gab;
unsigned int sum=0;
log_number[2]=1;
log_number[3]=0;
for (register unsigned int i=4; i<=MAX_NUMBER;i+=2)
{
log_number[i]=1;
log_number[i+1]=0;
}
for (register unsigned int i=3; i<=MAX_NUMBER; ++i)
{
if (0==log_number[i])
{
log_number[i]=1;
gab=i+i;
for(register unsigned int j=i+gab; j<=MAX_NUMBER; j+=gab)
log_number[j]=i;
}
}
unsigned int left=Sum_jari(number),right=Get_right(number,log_number);
while (left!=right)
{
if (MAX_NUMBER==number)
{
free(log_number);
return -1;
}
++number;
left=Sum_jari(number);
right=Get_right(number,log_number);
}
free(log_number);
return number;
}










