您的位置:首页 > 其它

HDU1164 Eddy's research I

2016-04-30 15:24 309 查看
题目链接

题目要求对输入的数进行分解质因数,如果输入的数据是质数,则直接输出,输入的数据范围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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: