这道题我们得用素数筛,到不是要判断某个数是否是质数,而是要在计算素数的过程中算出每一个数的最小质因数,对素数筛有这个功能!

首先我们看素数筛的步骤;

我们设计一个bool数组prime[N],prime[i]=1时i为非素数,反之为素数;

我们从2开始遍历,终止条件是我们要判断的区间的右端点,即右端点为N;

1:如果prime[i]=0,即i是素数,我们进入循环

(1)从2*i开始,记为j,遍历到N,每次递增i,将这一过程的prime[j]记为1【因为这一过程中的j都是i的倍数,定然不是素数,所以prime[j]=1】

2:如果prime[i]=1,即不是素数,则continue;

这样一套下来,prime数组里记录的就是一个数是否是素数的信息了;

那么我们怎么在这个过程中找到一个数的最小质因子呢?可能有的人已经发现了,这个最小质因子就是对应的i,什么意思呢?意思是当prime[i]=0时,我们进入循环,其中所有遇到的数的最小质因数就是i了;

有了以上算法,我们就可以开始计算了;

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;const int N=900010;bool prime[N+10];
int mi[N];//mi[i]存储i的最小质因数
int l,r;void getprime(){for(int i=2;i<=N;i++){//循环每一个数if(prime[i]) continue;//如果这个数不是素数,那么就跳过for(int j=i*2;j<=N;j+=i){//将所有素数的X倍都记为非素数prime[j]=1;mi[j]=i;//i是j的最小质因数}mi[i]=i;//质数的最小质因数是自己}mi[1]=1;//这里算不到1,所以得我们自己初始化}

那么接下来我们又遇到一个问题,我们怎么用以上信息将一个数质因数分解呢?

其实很简单,我们计算X时只需要进行以下循环即可;

首先我们有一个vector来存储答案,变量明为ans

1:如果X==1成立我们就退出循环

2:如果不成立我们进入以下操作

(1)将mi[X]push进ans

(2)X/=mi[X]即用X的最小质因数更新X

这么一套下来后ans里存储的就是X的质因数了;

接下来就是全套代码了;

/*** main函数返回值不能为void,否则会汇编出错,请使用int main(),并在最后return 0。* 虽然VC等windows下的编译器支持,但C/C++标准中不允许使用void main()!*/#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;const int N=900010;bool prime[N+10];
int mi[N];
int l,r;void getprime(){for(int i=2;i<=N;i++){if(prime[i]) continue;for(int j=i*2;j<=N;j+=i){prime[j]=1;mi[j]=i;}mi[i]=i;}mi[1]=1;}int main(){getprime();cin>>l>>r;//输入需要遍历的区间for(int i=l;i<=r;i++){vector<int> ans;int p=i;while(p!=1){ans.push_back(mi[p]);p/=mi[p];}cout<<i<<'=';sort(ans.begin(),ans.end());//将ans排个序for(int i=0;i<ans.size();i++){//输出anscout<<ans[i];if(i!=ans.size()-1) cout<<'*';}cout<<endl;}}

利用o(nlogn)的时间复杂度对某一个区间进行质因数分解相关推荐

  1. 利用Bing翻译API简单的实现一个翻译工具

    常见的翻译服务提供商有Google和微软,它们的在线翻译地址如下: Bing翻译: http://www.microsofttranslator.com/?FORM=R5FD Google翻译: ht ...

  2. 1-3.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之三

    在1-1.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之一 基础上进行如下操作: 所有路由不能全部都在myDjango下的urls.py路由文件中, ...

  3. 利用输入输出流及文件类编写一个程序,可以实现在屏幕显示文本文件的功能,类似DOS命令中的type命令

    利用输入输出流及文件类编写一个程序,可以实现在屏幕显示文本文件的功能,类似DOS命令中的type命令 package p1;import java.io.BufferedReader; import ...

  4. 【Android】利用爬虫将电影网站打包成一个APP

    以前总是通过HDMI线将电脑连接电视看剧看电影,但是每次想快进啊进行一些操作过于麻烦,手机上的APP的资源又太少,于是想到将电影网站打包成一个APP! APP已经差不多做好了,最近也比较忙,没什么时间 ...

  5. hfss和python_利用Python与HFSS联合仿真设计一个微带天线(附详细代码)

    原标题:利用Python与HFSS联合仿真设计一个微带天线(附详细代码) 我们知道HFSS是一款电磁仿真商用软件,用其进行天线的设计十分方便.而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软 ...

  6. hfss和python_利用Python与HFSS联合仿真设计一个微带天线!

    原标题:利用Python与HFSS联合仿真设计一个微带天线! 我们知道HFSS是一款电磁仿真商用软件,用其进行天线的设计十分方便.而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软件进行控制, ...

  7. 设计模式之美-11| 实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统?

    十一.设计模式之美-11| 实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统? 一.钱包业务背景介绍 一个简单的钱包业务功能如下 1.充值 用户通过三方支付渠道,把自己银行卡账户内的钱, ...

  8. 利用霍尔效应传感器和Arduino研究了一个简单的钟摆

    A simple pendulum studied using Hall effect sensor and Arduino 利用霍尔效应传感器和Arduino研究了一个简单的钟摆:原文(Hall e ...

  9. 利用python加上ffmpeg,ffmpy,做一个音视频格式转换器

    利用python加上ffmpeg,可以做一个简单的音乐或者视频格式转换器. 可以利用PyQt5做界面,本例中比较简单: 流程非常简单,点击"选择源文件",选取要转换的音频或者视频文 ...

最新文章

  1. 中key的用途_Micro Focus Operations Bridge Manager中的多个(RCE)漏洞
  2. Maven项目下update maven后Eclipse报错:java.lang.ClassNotFoundException: org.springfra
  3. ASP.NET自带的散列加密口令【转】
  4. 利用kali的msf提取汇编机器码(shellcode)
  5. java温故笔记(二)java的数组HashMap、ConcurrentHashMap、ArrayList、LinkedList
  6. ABB机器人VGT文件_ABB机器人与焊机之间通讯方式
  7. 阿里巴巴开源技术汇总:115个软件(四)
  8. C#中Abstract和Virtual的区别
  9. 太难了,斯坦福AI报告曝光!全球190万会AI,中国有5万
  10. iOS App图标和启动画面尺寸http://www.jianshu.com/p/adpKye
  11. 那些年我们一起用过的Hybrid App
  12. 机器学习数学基础篇一:高数基础
  13. 图像处理之直方图匹配
  14. vue仿网易云音乐播放器的前端补充
  15. 不要被后端糊弄了,我来告诉你网关是什么
  16. 省市县三级数据联动 -Java
  17. Win系统 - Windows10 系统恢复语言栏位置的方法(二)
  18. 信息安全快讯丨叶落知秋,e讯知安全
  19. Flask 推理模型,显存一直增长。
  20. CPU不同字母的意思

热门文章

  1. VR是TAA的终结者吗?
  2. JavaScript的相关知识与问题
  3. WLAN 无线局域网
  4. 【opencv学习笔记】第五篇:访问图像中像素的三种方式、ROI区域图像叠加和图像混合
  5. 计算机屏幕纵向显示如何改,电脑桌面纵向怎么设置
  6. 怎么修改win8计算机用户名和密码忘了怎么办,win8怎么修改用户名 Win8修改用户名与目录名的办法...
  7. 最近爆火的电子血氧仪是什么原理?测的准吗?
  8. php detailview,PHP开发框架Yii Framework教程(31) Zii组件-DetailView示例
  9. Navicat导入xlsx文件提示无法打开文件
  10. asd激光粒度仪测试原理是什么解答