质因数的个数 - 九度教程第54题

题目

时间限制:1 秒 内存限制:32 兆 特殊判题:否
题目描述:
求正整数 N(N>1)的质因数的个数。
相同的质因数需要重复计算。如 120=22235,共有 5 个质因数。
输入:
可能有多组测试数据,每组测试数据的输入是一个正整数 N,(1<N<10^9)。
输出:
对于每组数据,输出 N 的质因数的个数。
样例输入:
120
样例输出:
5
提示:
注意:1 不是 N 的质因数;若 N 为质数,N 是 N 的质因数。
来源:
2007 年清华大学计算机研究生机试真题

对一个数x分解素因数即确定素数p1,p2…pn,使其满足下式:

必要时还要确定e1,e2等幂指数。本题即求e1,e2,…en的和。

利用素数筛法预先筛选出所有可能在题面所给数据范围内成为素因数的素数。并在程序输入待处理数字n时,依次遍历所有小于n的素数,判断其是否为n的因数。若确定某素数为n的因数,则通过试除确定其对应的幂指数。最后求出各个幂指数的和即为所求。

#include <stdio.h>bool mark[100001];
int prime[100001];
int primeSize;void init()
{primeSize=0;for(int i=2;i<100000;i++){if(mark[i]==true)continue;prime[primeSize++]=i;if(i>=1000)break;for(int j=i*i;j<=100000;j+=i){mark[j]=true;}}
}int main()
{init();int n;while(scanf("%d",&n)!=EOF){int ansPrime[30];//按顺序保存分解出的素因数int ansSize=0;//分解出素因数的个数int ansNum[30];//保存分解出的素因数对应的幂指数for(int i=0;i<primeSize;i++){//依次测试每一个素数if(n%prime[i]==0){//若该素数能整除被分解数ansPrime[ansSize]=prime[i];//则该素数为其素因数ansNum[ansSize]=0;//初始化幂指数为0while(n%prime[i]==0){//从被测试数中将该素数分解出来//并统计其幂指数ansNum[ansSize]++;n/=prime[i];}ansSize++;//素因数个数增加if(n==1)break;//若已被分解成1则分解提前终止}}if(n!=1){//若测试完2到100000内所有素因数,n仍未被分解至1//则剩余的因数一定是n一个大于100000的素因数ansPrime[ansSize]=n;//记录该大素因数ansNum[ansSize++]=1;//其幂指数只能为1//此处ansSize++是与n=1的情况保持一致,n记录的是素因数的真实个数//方便后面统一遍历输出结果}int ans=0;for(int i=0;i<ansSize;i++){
//            printf("prime: %d %d\n",ansPrime[i],ansNum[i]);ans+=ansNum[i];//统计各个素因数的幂指数和}printf("%d\n",ans);}return 0;
}

该代码按照如下步骤对输入的整数分解素因数:
1.利用素数筛法筛得0到100000区间内所有素数
2.输入n
3.依次测试步骤1中得到的素数能否整除n,若能则表明该素数为它的一个素因数
4.不断将n除以该素数,直到不能再被整除为止,同时统计其幂指数
5.若在完成某个素数的幂指数统计后,n变为1,则表明n的所有素因数全部被分解出来,这样就不用再去遍历后续的素数,分解活动提前终止
6.若遍历,测试,分解完所有预处理出来的素数,n仍旧没被除成1,则表明n存在一个大于100000的因子,且该因子必为其素因子,且其幂指数必然为1

首先说明素数筛法只需筛到100000即可,而不是与输入数据同规模的10 0000 0000.。这样处理的理论依据是:n至多只存在一个大于sqrt(n)的素因数(否则两个大于sqrt(n)的数相乘即大于n)。这样只需将n所有小于sqrt(n)的素数从n中除去,剩余部分必为该大素因数。所以不必依次测试sqrt(n)到n的素数,而是在处理完小于sqrt(n)的素因数时就能确定是否存在该大素因数,若存在其幂指数也必为1.

完成素因数分解后同样可以确定被分解整数因数的个数为(e1+1)(e2+1)…*(en+1),即有所有的素因数不同组合数得出,i(加1是表示不选择该素因数,所以素因数pn有en+1种选择情况)最终结果没有减1是因为算上了因数1.

质因数的个数 - 九度教程第54题相关推荐

  1. Piggy-Bank - 九度教程第 102 题

    Piggy-Bank - 九度教程第 102 题 题目 时间限制:1 秒 内存限制:32 兆 特殊判题:否 题目描述: Before ACM can do anything, a budget mus ...

  2. 不容易系列之一(九度教程第 94 题)

    不容易系列之一(九度教程第 94 题) 时间限制:1 秒 内存限制:128 兆 特殊判题:否 1.题目描述: 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了!做好"一件&q ...

  3. Excel排序 九度教程第4题

    题目链接 题目描述: Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. 对每个测试用例,首先输出1行"Case i:",其中 i 是测试用例的编号(从1开始) ...

  4. 数制转换 九度教程第44题 a进制数转换为b进制数 不同进制之间相互转换

    题目链接 解题思路: 1.将a进制数转换成十进制数: 2.将十进制数转换成b进制数: 3.使用do while 循环,可以确保即使被转换数字是 0 ,程序也能正常工作. AC代码: #include& ...

  5. 成绩排序 九度教程c语言,九度OJ 1089 数字反转

    题目分析: 使用队列存放每一位的数字,然后输出并计算得到反转数值,从而实现数字反转. 源代码: [cpp] #include #include using namespace std; int mai ...

  6. 九度oj 第1题 二维数组中的查找 何海涛:《剑指Offer:名企面试官精讲典型编程题》

    一.题目信息 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入: ...

  7. 动态规划 背包问题小结 0-1背包(采药 九度第101题) 完全背包(Piggy-Bank POJ 1384) 多重背包(珍惜现在,感恩生活 九度第103题)

    本小结介绍0-1背包.完全背包以及多重背包问题 记忆要点: 0-1背包:二维数组情况下,顺序遍历体积或者倒序均可以                降维情况下需倒序遍历体积 完全背包:数组降维+顺序遍历 ...

  8. 九度OJ 1207 质因数的个数

    题目地址:http://ac.jobdu.com/problem.php?pid=1207 题目描述: 求正整数N(N>1)的质因数的个数. 相同的质因数需要重复计算.如120=2*2*2*3* ...

  9. 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

    剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...

最新文章

  1. 【ShaderToy】跳动的心
  2. 如何用VMware搭建HA和DRS环境(第一篇;序)
  3. Redis基础学习(四)—Redis的持久化
  4. HTTP协议理解与应用总结
  5. uni-app 跨端开发注意事项
  6. 为Eureka Server添加用户认证
  7. 基于SpringBoot的网页版进销存-2.0版本
  8. 2018宝鸡市高三数学第一次质量检测
  9. java记忆翻牌_html5记忆翻牌游戏
  10. matlab 怎么求直线斜率,matlab中如何求近似(不平滑)直线的斜率
  11. elasticsearch 6.2.3安装 head插件问题
  12. 农业大田作物智慧种植科研
  13. Currency Trading: Dollar in a Funk as Traders Bet on Slow Rebound
  14. MFC 在其他的类中引用Dlg类方法
  15. mendeley的使用
  16. dokuwiki登录设置
  17. http://user.qzone.qq.com/383074470/blog/1270631840
  18. 如何参与github开源项目,成为contributor
  19. 重学java----面向对象编程案例(房屋出租系统)
  20. 为Java应用开启JMX服务

热门文章

  1. 设计模式 with Python 10:状态模式
  2. 计算机工程美国留学,美国留学 计算机工程专业研究生排名
  3. ASP.NET 中使用 Plupload 上传图片
  4. 星外php7,星外PHP自动配置安装程序
  5. 独家对话微软顶级代码女神潘正磊:Visual Studio 与 VS Code 的未来走向 | 人物志
  6. 如何把App放在服务器上供用户下载
  7. 苹果cmsv10采集插件+安装教程
  8. Java中的伪随机数
  9. 调试QEMU运行xv6时黑框闪烁问题的过程
  10. 数位 dp 相邻位数字差值的绝对值不能超过 2_XMZD-102 数字温度仪