问题描述:

给出n个整数,请分解出它们的质因数。

输入格式:

第一行,一个整数n(n<=10000)

接下来n行,每行一个整数k(k<=2000,000,000,)

输出格式:

n行,每行代表一个整数的质因数,数字间以空格做间隔,按由小到大排列

样例输入:

3
100
1235
123456

样例输出:

2 5
5 13 19
2 3 643

题目分析:

这道题看上去不难,但是时间很少,优化时间的方法很值得一讲

拿到题,相信大多数人都是这么写的:

#include<bits/stdc++.h>
using namespace std;
bool isprime(long long int num){num = abs(num);if(num == 2){return true;}if(num%2 == 0 || num<2){return false;}else{for(long long int i = 3; i*i <= num; i +=2){if(num%i == 0){return false;}}return true;}
}
int main ()
{int n,k;scanf("%d",&n);for(int i = 1; i <= n; i++){scanf("%d",&k);for(int j = 2; j <= k; j++){if(k%j == 0){if(isprime(j)){printf("%d ",j);}}}printf("\n");}return 0;
}

前面是祖传判断质数函数,后面是主程序(啊~废话)

然而结果……

这时候,有大聪明就说了:

“质数都是奇数(2除外),所以我们只需要给2一个特判,在循环那里改为int j = 3; j <= k; j += 2不就行了?”

修改后代码:

#include<bits/stdc++.h>
using namespace std;
bool isprime(long long int num){num = abs(num);if(num == 2){return true;}if(num%2 == 0 || num<2){return false;}else{for(int i = 3; i*i <= num; i +=2){if(num%i == 0){return false;}}return true;}
}
int main ()
{int n,k;scanf("%d",&n);for(int i = 1; i <= n; i++){scanf("%d",&k);if(k%2 == 0){printf("2 ");}for(int j = 3; j <= k; j += 2){if(k%j == 0){if(isprime(j)){printf("%d ",j);}}}printf("\n");}return 0;
}

的却,这样要快一些,但不多……

除了空间加了4KB,其余还不如前面。

那怎么办呢?

举个例子:当输入2000000000(题目约定k的最大值)的时候,程序运行了很久,最终得出答案:2 5.

那么对应的优化方案就是找到一个因数后,不停地除以该因数,直到除不尽为止。

AC代码:

#include<bits/stdc++.h>
using namespace std;
bool isprime(long long int num){num = abs(num);if(num == 2){return true;}if(num%2 == 0 || num<2){return false;}else{for(long long int i = 3; i*i <= num; i +=2){if(num%i == 0){return false;}}return true;}
}
int main ()
{int n,k;scanf("%d",&n);for(int i = 1; i <= n; i++){scanf("%d",&k);if(k%2 == 0){printf("2 ");}for(int j = 3; j <= k; j += 2){if(k%j == 0){if(isprime(j)){printf("%d ",j);}//不停地除while(k%j == 0){k /= j;                    }}}printf("\n");}return 0;
}

这道题确实有意思,值得认真思考。

重庆NKOJ2404-【语法基础】分解质因数相关推荐

  1. 重庆NKOJ1720-【语法基础】孪生素数

    问题描述 如果n和n+2都是素数,称它们是孪生素数. 输入整数m,输出两个均不超过m的最大孪生素数.5<=m<=10000 输入格式: 一个整数m 输出格式: 两个空格间隔的整数,表示m以 ...

  2. 蓝桥杯 基础练习 分解质因数 python语言

    蓝桥杯 基础练习 分解质因数 python语言 描述 求出区间[a,b]中所有整数的质因数分解. 输入 输入描述: 输入两个整数a,b. 输入样例: 3 10 输出 输出描述: 每行输出一个数的分解, ...

  3. 蓝桥杯 基础练习 分解质因数 C语言

    蓝桥杯 基础练习 分解质因数 C语言 描述 求出区间[a,b]中所有整数的质因数分解. 输入 输入描述: 输入两个整数a,b. 输入样例: 3 10 输出 输出描述: 每行输出一个数的分解,形如k=a ...

  4. [蓝桥杯][基础练习VIP]分解质因数

    题目描述 求出区间[a,b]中所有整数的质因数分解. 提示 先筛出所有素数,然后再分解. 数据规模和约定 2< =a< =b< =10000 输入 输入两个整数a,b. 输出 每行输 ...

  5. java isprime函数_翁恺老师零基础java课程函数章第一题分解质因数

    分解质因数(5分) 题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. 现在 ...

  6. Java基础编程之分解质因数

    问题分析: 1. 所谓分解质因数就是每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数.如30=2×3×5 .分解质因数只针对合 ...

  7. Java实现 蓝桥杯VIP 基础练习 分解质因数

    题目介绍 问题描述 求出区间[a,b]中所有整数的质因数分解. 输入格式 输入两个整数a,b. 输出格式 每行输出一个数的分解,形如k=a1a2a3-(a1<=a2<=a3-,k也是从小到 ...

  8. c语言用质因数分解法求最大公约数,分解质因数法求最大公约数(javascrip实现)

    //判断是否为质数------------------------------------------------------ function isPrime(n) { for (var i = n ...

  9. 华清远见重庆中心--后端基础阶段技术总结/个人总结

    目录 目录 目录 Java基础知识 java概述 JDK安装 JDK卸载 JDK版本切换 认识JetBrains 安装IDEA IDEA环境的认识 新建一个Java的项目 新建一个文件 第一个Java ...

最新文章

  1. Pandas 中的 concat 函数
  2. Verilog有符号数运算
  3. 实时全局光照!SVOGI in CryENGINE
  4. 概率假设密度滤波 matlab,高斯混合概率假设密度滤波器
  5. java 81 08,Java更多的库谜题81:烧焦到无法识别
  6. (十一)进阶算法之“搜索排序”
  7. 在存储器的层次结构里,谁最快,谁最贵,谁最大?
  8. Facebook也大干新闻聚合 “新闻快读”向所有媒体开放
  9. shell脚本--批量测试主机连通性ping IP
  10. php myflow,WordPress安装使用Flowplayer简易指南
  11. Zabbix 监控 MySQL
  12. Phome开发历程分享——Enjoy the Beginning
  13. DingTalk机器人C#代码
  14. MikroTik ROS软路由OSPF命令配置实例
  15. 【渝粤题库】陕西师范大学180213《消费经济学》作业 (高起本)
  16. C语言--三次方程数值求解
  17. 形式语言与自动机第二课
  18. K线形态识别—双K线之卖出型双日K线组合
  19. python人工智能面试题爱奇艺面试题_经典算法题:爱奇艺研发工程师算法笔试题...
  20. Unity 之 实用技巧更换编辑器主题

热门文章

  1. html引入babel-polyfill,babel-polyfill
  2. html --- 首字母放大缩小
  3. Linux hwclock命令参数及用法详解--Linux显示/设置硬件时钟命令
  4. 机器学习:让机器学会打游戏之陨石坠落
  5. 京东iphone8的异步加载爬取评论
  6. 《万岁,高三2班》剧照及剧组采访文章
  7. 高手在交易中总结的期货
  8. vue 导出excel,支持单元格合并,背景色,列宽,字体大小等
  9. java计算机毕业设计河南省农村多元化养老服务管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署
  10. Real_time实时语义分割网络 SegNet, ENet, ICNet, BiSeNet,ShelfNet