题目链接
题目要求对输入的数进行分解质因数,如果输入的数据是质数,则直接输出,输入的数据范围1<x<=65535
输入的数据小于65536,则只需要测试能否被小于√65536=256的素数整除即可。
因为题目给的区域比较小,所以可以从2,3,4,5……按从小到大次序直接试除,若能被整除,则可以把输入的数除以这个数,并且输出。因为是从小到大进行试除,所以不会输出合数。
可以在程序中放置一个素数表进行优化,小于256的素数有54个,可以直接放到程序中(也可以用筛选法等算一个合适的素数表,若不确定数据多大,可以用多少算多少)。
C语言代码
#include <stdio.h>
#define PMAX 54
int p[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251};
void calc(int n){
int i;
int first=1;
i=0;
while(i<PMAX&&p[i]<n){
if(n%p[i]==0){
n/=p[i];
if(first)
first = 0;
else
putchar('*');
printf("%d",p[i]);
}else
i++;
}
//此时n只能是1,或者大于256的素数
if(n!=1){
if(first)
first = 0;
else
putchar('*');
printf("%d",n);
}
putchar('\n');
}
int main(void)
{
int n;
while(scanf("%d",&n)!=EOF){
calc(n);
}
return 0;
}