九度OJ 题目1207:质因数的个数
来源:互联网 发布:服装商品数据分析报表 编辑:程序博客网 时间:2024/06/05 19:53
题目描述:
求正整数N(N>1)的质因数的个数。
相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
输入:
可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。
输出:
对于每组数据,输出N的质因数的个数。
样例输入: 120
样例输出: 5
提示:
注意:1不是N的质因数;若N为质数,N是N的质因数。
二.题目分析
判断素数题时注意时间的限制,可选用素数筛或者打表保存素数。刚开始做了多遍测试,但是提交还是WA。。看了网上的题解,有一个细节忽略了,题中的最大数据开到1000000,超出了内存限制,在判断素数时,我们应该注意一个大数在分解完所有的已知素数之后,要是没有分解完,那么肯定还存在一个超出范围的大素数,质因子要加1。
三.代码
#include <stdio.h>#include <stdlib.h>#include <math.h>//N 10 9(由于内存限制为32兆,是兆级别的,所以最大数据开到1000000,超出范围要另外处理)#define MAX 100000int p[MAX],num=0; void Prime(){ int i,j,b[MAX]; for(i=0;i<MAX;i++) b[i]=1; b[0]=0; b[1]=0; //素数筛找出所有的素数,并将其保存到p[]中 for(i=2;i<MAX;i++) { if(b[i]) { p[num++]=i; for(j=i+i;j<MAX;j=j+i) b[j]=0; } }} int Count(int x){ int i,cn=0; for(i=0;i<num;i++) { while(x%p[i]==0) { cn++; x/=p[i]; } if(x==1) break; } if(i==num) //!!!超出10^6的范围还没有分解完,那么一定还有一个大于10^6的素数 cn++; return cn;} int main(){ int N; Prime(); while(scanf("%d",&N)!=EOF) printf("%d\n",Count(N)); return 0;}
0 0
- 九度oj 题目1207:质因数的个数
- 九度OJ 题目1207:质因数的个数
- 九度OJ题目1207:质因数的个数
- 【九度OJ】题目1207:质因数的个数 解题报告
- 九度OJ题目1207:质因数的个数
- 题目1207:质因数的个数 九度OJ
- 九度OJ 1207: 质因数的个数
- 九度OJ 1207 质因数的个数
- 九度OJ 1207:质因数的个数
- 九度OJ-1207:质因数的个数
- 九度OJ-1207--质因数的个数
- 九度题目1207:质因数的个数
- 九度题目1207质因数的个数
- 九度 题目1207:质因数的个数
- 九度OJ 1207 质因数的个数 JAVA
- 九度OJ 1207:质因数的个数 (质数)
- 九度1207:质因数的个数
- 九度OJ 1207 质因数的个数 (筛素数,勉强AC)
- Activity运行状态以及完全退出程序
- UICollectionView
- HTTP协议
- hdu 1058 Humble Numbers(dp)
- C 语言开发
- 九度OJ 题目1207:质因数的个数
- 在二维数组寻找两个定点的最短距离(递归)
- 对梯度幅值进行非极大值抑制
- OpenCV 完全安装 新增VS2010+OpenCV2.1,新增VS2010+OpenCV2.3.1
- Thinking in java 之'数据初始化'
- Android学习笔记之绘图api以及自定义视图
- private和public的问题
- 多线程
- DesignPattern_Java:Factory Method Pattern