HDU1164 Eddy's research I
2016-04-30 15:24
309 查看
题目链接
题目要求对输入的数进行分解质因数,如果输入的数据是质数,则直接输出,输入的数据范围1<x<=65535
输入的数据小于65536,则只需要测试能否被小于√65536=256的素数整除即可。
因为题目给的区域比较小,所以可以从2,3,4,5……按从小到大次序直接试除,若能被整除,则可以把输入的数除以这个数,并且输出。因为是从小到大进行试除,所以不会输出合数。
可以在程序中放置一个素数表进行优化,小于256的素数有54个,可以直接放到程序中(也可以用筛选法等算一个合适的素数表,若不确定数据多大,可以用多少算多少)。
C语言代码
题目要求对输入的数进行分解质因数,如果输入的数据是质数,则直接输出,输入的数据范围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; }
相关文章推荐
- 项目经理多年的经验之谈
- 定位
- 北京好玩的博物馆
- C++走向远洋——42(项目二,我的数组类,深复制,构造函数)
- HDU 5606 tree(并查集的应用)
- 剑指offer(58):链表中环的入口节点
- IoC容器的初始化过程
- linux命令英文缩写的含义(方便记忆)
- Git学习9:Git远程版本库
- python day2:python 初识(二)
- 期末总结
- Fiddler系列之修改host
- HDOJ(HDU) 2097 Sky数(进制)
- 富文本编辑器
- HDOJ(HDU) 2097 Sky数(进制)
- C/C++中extern关键字详解
- java抽象类
- PHP基础数组操作(二)
- thinkPHP的<eq>标签
- oracle用户创建及权限设置及表空间