HDU's ACM 1164 Eddy's research I

原題鏈接:HDU’s ACM 1164 Eddy’s research I


分析:這是一道簡答的語法題,理解題意,並模擬出來就好。


注意:可以先寫個小程序,計算下在65535範圍內的素數數量


AC Code:

<span style="font-family:Microsoft YaHei;font-size:14px;">#include <stdio.h>
#include <string.h>

#define PRIMENUM 6545

int prime[PRIMENUM];   // 素數表
int numOfPrime[PRIMENUM]; // 記錄各個素數數目的數組

void init()
{
	int i, j, is;
	int index=0;
	for(i=2;i<MAXN;++i) {
		is = 1;
		for(j=2;j*j<=i;++j)
			if(i%j==0)
				is = 0;

		if(is)
			prime[index++] = i;
	}
}

int main()
{
	int num, tmp;
	
	int i, j;
	init();
	
	while(scanf("%d", &num) == 1) {
		tmp = num;

</span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="white-space:pre">		</span>// PROCESS
		i=0;
		while(tmp!=1) {
			if(tmp%prime[i] == 0){
				tmp /= prime[i];
				numOfPrime[i]++;

			}
			else
				i++;
		}

</span>
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="white-space:pre">		</span>// OUTPUT
		j=0;
		while(!numOfPrime[j])
			j++;
		printf("%d", prime[j]);
		numOfPrime[j]--;
		
		for(;j<PRIMENUM && prime[j]<=num;++j) {
			if(numOfPrime[j]){
				do {
					printf("*%d", prime[j]);
				} while(--numOfPrime[j]);
			}
		}
		printf("\n");
	}
	return 0;
}</span>


点赞