U E D R , A S I H C RSS

Smith Numbers/조현태

.. 크 ~~ ..
....*^^*
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;
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:04
Processing time 0.0146 sec