U E D R , A S I H C RSS

Factorial Factors/조현태

소�

블로그� ����서 조금� 빠르게 만들었다.
누가 1ì–µì�„ 3-4초안ì—� ìœë ¥í•˜ê²Œ 해주..ã… .ã…œ (참고로 ì�´ 소스는 12-13ì´ˆ 걸린다.)
결국 입력� 무슨 ��지 몰�서 내맘대로 정해버렸다. cin..ㅎㅎㅎ 누가 설명좀 해주..ㅎㅎ
그러고보니 우리집 컴퓨터� 성능� 고려하지 않았다...;; � 다른집� 비슷하리� ��한다..^^;; 3.2G CPU...OTL..
보창형 심심하실까�~ 어제 ��한대로 약간 수정했다. �빠르게할 다른 방법� 있는것 같지만 �단 �거부터~
1억� 기준으로 테스트 했�때 13초->10초정�� 향�� 있다. T.T 별로 많� 빨�지지는 않았네..

소스

~cpp 
#include <iostream>
#include <math.h>

using namespace std;

unsigned int factorial_factors(unsigned int);

void main()
{
	cout << "2-1000000사�� 숫�를 입력해주세요.조건� 맞지않는 숫�를 입력하면 종료�니다.\n";
	cin >> input_number;
	while (1)
	{
		cout << factorial_factors(input_number) << "\n";
		cin >> input_number;
	}
}

unsigned int factorial_factors(unsigned int answer)
{
	unsigned int *log_answer = (unsigned int*)malloc((answer+2)*sizeof(unsigned int));
	unsigned int sum = 1;
	unsigned int gab;
	unsigned int suchEnd = (unsigned int)sqrt((double)answer);
	log_answer[2]=1;
	log_answer[3]=0;
	for (register unsigned int i=4; i<=answer;i+=2)
	{
		log_answer[i]=2;
		log_answer[i+1]=0;
	}
	for (register unsigned int i=3; i<=suchEnd; ++i)
	{
		if (0==log_answer[i])
		{
			log_answer[i]=1;
			gab=i+i;
			for(register unsigned int j = i * i; j <= answer; j+= gab)
				log_answer[j] = i;
			++sum;
		}
		else
			sum+=log_answer[i]=log_answer[i/log_answer[i]]+1;
	}
	for (register unsigned int i = suchEnd + 1; i <= answer; ++i)
	{
		if (0==log_answer[i])
		{
			log_answer[i]=1;
			gab=i+i;
			++sum;
		}
		else
			sum+=log_answer[i]=log_answer[i/log_answer[i]]+1;
	}
	free(log_answer);
	return sum;
}

나�게 할�

울집 1.4G�� ㄱ-;;;; �거 한번 �전해볼까나;; -태훈
해봤어. 잘�아가��. 다른컴퓨터�서�..ㅎㅎㅎ 여전히 실행하면 바로뜨��? 100만정�는 ㅎㅎ-조현태
�야 �가뭔지 몰르겟어 넘 고난��� 스킬� ㅋㅋㅋㅋ
----
AOI FactorialFactors
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:15
Processing time 0.0041 sec