这题一开始使用常规的素数求法发现会超时,最后选择了埃氏筛法。

#include<vector>
#include<iostream>
#include<algorithm>
#include<string>
#include<map>
using namespace std;vector<bool>vec;//用于埃氏筛的向量
vector<long long>primeNums;//存放需要的素数
map<long long,int>m;//用map来记录各个素数用到的次数//线性筛
long long prime(long long n){vec[0]=false;vec[1]=false;for(int i=2;i*i<=n;i++){//此处循环用于减小计算素数的范围while(n>i&&n%i==0){n/=i;}//埃氏筛if(vec[i]==true){for(int j=2*i;j<=n;j+=i){vec[j]=false;}}}//将求出的素数存入向量for(int i=0;i<=n;i++){if(vec[i]){primeNums.push_back(i);}}return primeNums.size();//返回向量的大小
}int main(){long long num;cin>>num;    //输入1时需要特判if(num==1){cout<<"1=1"<<endl;return 0;}    //重构向量长度vec.resize(num+1,true);//求出可能用到的素数long long len=prime(num);
//    for(auto i:primeNums){//        cout<<i<<" ";
//    }string res= to_string(num)+"=";//计算各个素数用到的次数while(num>1){for(int i=0;i<len;i++){while(num%primeNums[i]==0){m[primeNums[i]]++;num/= primeNums[i];}}}
//    for(auto it:m){//        cout<<it.first<<" "<<it.second<<endl;
//    }//构造答案int cnt=0;for(auto it:m){if(it.second!=1){res=res+ to_string(it.first)+"^"+ to_string(it.second);}else{res=res+ to_string(it.first);}cnt++;if(cnt<m.size()){res=res+"*";}}cout<<res<<endl;return 0;
}

测试结果

最后测试时发现结果还是接近超时,需要寻找一种时间复杂度更低的算法。

PAT1059 Prime Factors(埃拉托斯特尼筛法)相关推荐

  1. 【算法/数论】埃拉托斯特尼筛法时间复杂度的证明

    文章目录 一.埃拉托斯特尼筛法简介 二.黎曼 ζ \zeta ζ函数与欧拉乘积公式 三.问题求解 一.埃拉托斯特尼筛法简介 埃拉托斯特尼筛法(Sieve of Eratosthenes)是一种能快速求 ...

  2. 埃拉托斯特尼筛法(素数高效筛选)

    一.素数定义 素数又称质数(prime number),指所有大于1的数中只能被1和它本身整除的数. 二.埃拉托斯特尼筛法(Sieve of Eratosthenes) 1.算法的基本思想: 如果一个 ...

  3. 埃拉托斯特尼筛法 快速查找素数

    埃拉托斯特尼筛法 快速查找素数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个 ...

  4. 埃拉托斯特尼筛法求质数

    埃拉托斯特尼筛法:埃拉托斯特尼筛法,简称埃氏筛或爱氏筛,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法.要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素 ...

  5. 求大素数 - 埃拉托斯特尼筛法

    ★引言 昨天做一道数论的题,无意中接触到了关于筛法快速求素数的题目,就搞了一下关于素数的知识,大家都知道,数论其实和素数关系是非常紧密的. ★题目 下面我就由浅入深,从各种角度来剖析这道题目的奥妙. ...

  6. 埃拉托斯特尼筛法(埃筛)

    埃筛的作用是找出区间内的所有素数,复杂度是O(nloglogn).其基本思想是:素数的倍数一定是合数. #include <bits/stdc++.h> using namespace s ...

  7. 埃拉托斯特尼筛法 the Sieve of Eratosthenes method

    步骤 列出2以后的所有范围内的数字 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...range-1 标出序列中的第一个质数--2 将剩下序列中, ...

  8. 埃拉托斯特尼筛法算法复杂度(n*lnlnn)的证明([欧拉数学]素数倒数之和)

    上一篇文章我通过欧拉数学的方式简单地讲了数论中的"黎曼ζ函数"和"金钥匙".事实上,这把"金钥匙"与很多问题之间的联系已经被建立了起来,换句 ...

  9. 利用 OpenMP 实现埃拉托斯特尼(Eratosthenes)素数筛法并行化

    文章目录 1.算法简介 1.1 筛法起源 1.2 筛法过程 2.实现代码 参考文献 1.算法简介 1.1 筛法起源 筛法是一种简单检定素数的算法.据说是古希腊的埃拉托斯特尼(Eratosthenes, ...

最新文章

  1. Linux下getopt函数的使用
  2. 二进制日志和数据更新的关系
  3. Python基础--1.1Python基础介绍
  4. 躁动的小Z 最短路+路径记录
  5. G - Tiling FZU - 2040(未解决)
  6. Mac 下nginx 环境的配置
  7. 【收藏】ASP.NET英文技术文章推荐[11/4 - 11/11]
  8. Anaconda, conda, pyenv, virtualenv的区别
  9. matlab如何画出来地球,matlab绘制地球
  10. 如何将原生PDF转为纯图像Word?
  11. Ubuntu22.04 x64 下运行同花顺Linux版,解决libssl版本错误问题
  12. MySQL批量插入和单条插入的性能
  13. mobi电子书如何用Mac打开?
  14. Shiro框架中实现CA登录及免密功能
  15. 未来软件工作室2019年年会总结
  16. html5核心ml5图片居中,HTML5图片居中的问题
  17. attiny13a程序实例_关于ATtiny13A的程序
  18. 图的邻接矩阵存储及遍历
  19. OA系统定制化,企业办公管理需求的新趋势
  20. MSVCR110.dll文件找不到修复

热门文章

  1. 小米1 android 4.4,小米1有什么好用的刷机包,最高能升级到android4.4吗
  2. 四六考试的交易必读(请买家仔细阅读各条款)
  3. Redis持久化:RDB、AOF
  4. 看了我的mybatis-plus用法,其他同事也悄悄模仿了!
  5. 【nodejs代理服务器一】nodejs http-proxy 开发反向代理服务器,防火墙,过滤常见的web渗透
  6. 基于MVC模型和分层模式完成登录和注册
  7. 【操作系统】-- 处理机调度(高级调度、中级调度、低级调度、调度指标)
  8. android 自定义倒计时控件(圆形倒计时显示)
  9. 美女工程师教你一分钟学会信号发生器复杂信号编码输出
  10. 蓝桥杯嵌入式按键扫描函数