由于这道题目数据范围小,所以属于水题。可以采取暴力的做法来解决。

代码如下:

#include"bits/stdc++.h"
using namespace std;
const int maxn=;
bool tag[maxn+];
vector<int>v;int n;
bool judge(int m){
while(n%m==){
if(n==m){
printf("%d\n",m);
return true;
}
else printf("%d*",m);
n/=m;
}
return false;
}
int main(){
for(int i=;i<=maxn;i++){
if(!tag[i])v.push_back(i);
for(int j=i<<;j<=maxn;j+=i)
tag[j]=true;
}
while(~scanf("%d",&n)){
for(int i=;i<v.size();i++)
if(n%v[i]==&&judge(v[i]))
break;
}
return ;
}

但是如果把这题的数据范围加到1e8,那么用这种暴力的方法光是打一个素数表都很耗时。如何快速解决1e8的因式分解呢?可以这样想:

1e8以内的数大于1e4的质因子最多只能出现一次(因为1e4的平方等于1e8,所以如果出现一次以上就会超过1e8),而且如果这个数出现了大于1e4的质因子,那么当我们把小于1e4的质因子都除尽时,留下的就是这个大于1e4的质因子。所以我们打素数表时其实不用打到1e8,只要1e4就够了(如果范围是n就打到根号n),这样可以加速了1e4倍。

代码如下:

#include"bits/stdc++.h"
using namespace std;
const int maxn=1e4;
bool tag[maxn+];
vector<int>v;int n;
bool judge(int m){
while(n%m==){
if(n==m) return true;
else printf("%d*",m);
n/=m;
}
return false;
}
int main(){
for(int i=;i<=maxn;i++){
if(!tag[i])v.push_back(i);
for(int j=i<<;j<=maxn;j+=i)
tag[j]=true;
}
while(~scanf("%d",&n)){
for(int i=;i<v.size();i++)
if(n%v[i]==&&judge(v[i]))
break;
printf("%d\n",n);
}
return ;
}

对于这一题65535的范围maxn只要设为256就够了,其他基本没有改动

还有一种解决因式分解的方法,如果如果内存足够并且测试数据有很多组的情况下这种方式会比较优

代码如下:

#include"bits/stdc++.h"
using namespace std;
const int maxn=1e4;
const int maxm=1e8;
int tag[maxm+];
vector<int>v;int n;
int main(){
for(int i=;i<=maxn;i++){
if(!tag[i])v.push_back(i);
for(int j=i<<;j<=maxm;j+=i)
if(!tag[j])tag[j]=i;
}
while(~scanf("%d",&n)){
while(tag[n]){
printf("%d*",tag[n]);
n/=tag[n];
}
printf("%d\n",n);
}
return ;
}

HDU-1164-Eddy's research I(分解质因数)的更多相关文章

  1. hdu 1164:Eddy's research I(水题,数学题,筛法)

    Eddy's research I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  2. HDU 1164 Eddy's research I( 试除法 & 筛法改造试除法 分解整数 )

    链接:传送门 题意:给出一个整数 n ,输出整数 n 的分解成若干个素因子的方案 思路:经典的整数分解题目,这里采用试除法 和 用筛法改造后的试除法 对正整数 n 进行分解 方法一:试除法对正整数 n ...

  3. hdu 1164 Eddy's research I

    http://acm.hdu.edu.cn/showproblem.php?pid=1164 题意很简单,只是写代码的时候需要注意几个问题 一.筛选素数的时候记得用埃式筛选法,要是直接找可能会WA. ...

  4. HDU 1164 Eddy's research I

    题目链接 题意 : 给你一个数,让你用它的素数质因子表示出来. 思路 : 先打一下表,因为会有重复的质因子,所以从大到小开始找,并且找到一个之后不能就接着往下找,要再找一遍这个数. #include ...

  5. HDU 1164 Eddy&#39;s research I【素数筛选法】

    思路:将输入的这个数分成n个素数的相乘的结果,用一个数组存储起来.之后再输出就能够了 Eddy's research I Time Limit: 2000/1000 MS (Java/Others)  ...

  6. HDU 1165 Eddy's research II(给出递归公式,然后找规律)

    - Eddy's research II Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  7. HDOJ 1164 Eddy's research I(拆分成素数因子)

    Problem Description Eddy's interest is very extensive, recently he is interested in prime number. Ed ...

  8. HDU 4497 GCD and LCM (分解质因数)

    链接 :  http://acm.hdu.edu.cn/showproblem.php?pid=4497 假设G不是L的约数 就不可能找到三个数. L的全部素因子一定包括G的全部素因子 而且次方数 ...

  9. HDOJ 1164 Eddy's research I

    Problem Description Eddy's interest is very extensive, recently he is interested in prime number. Ed ...

  10. HDU 1165 Eddy's research II (找规律)

    题意:给定一个表达式,然后让你求表达式的值. 析:多写几个就会发现规律. 代码如下: #pragma comment(linker, "/STACK:1024000000,102400000 ...

随机推荐

  1. echarts图表重设尺寸

    在绘制chart的方法中添加下面语句,则会在尺寸变化的时候,重新绘制图表 window.addEventListener("resize", function () { myCha ...

  2. C#判断两个字符串是否相等的方法 ,还有char赋空值办法。

    string str1="Test"; string str2 = "Test"; if (str1==str2) //第一种判断方式 { //第二种判断方式 ...

  3. SSM到Spring Boot-校园商铺平台

    第04章 店铺注册功能模块 4-3 Thumbnailator图片处理和封装Util[通过java代码实现给图片打上水印] 4-3 Thumbnailator图片处理和封装Util[通过java代码实 ...

  4. poj2243前一道题升级(思维构造+ac自动机)

    题:http://acm.hdu.edu.cn/showproblem.php?pid=2243 题意:给出m个模式串,求长度小于n的且存在模式串的字符串数有多少个(a~z) 分析:我们反着来,用总的 ...

  5. 安装完Ubuntu后没有设置过root密码,想要进入root账户怎么办?

    安装完Ubuntu后没有设置过root密码,想要进入root账户怎么办? Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码.我们可以在终端输入命令 sudo passwd,然 ...

  6. UML-类图-如何画引用类和集合?

    1.画引用类 引用到了类时,需要画关联线,否则其他基本类型(int.string.date等)不画. 2.画集合 当然,方法1中可加入箭头.对应java代码: public class Sale { ...

  7. linux安装java步骤

    本文转发自博客园-Q鱼丸粗面Q.博客园-郁冬的文章,内容略有改动 本文已收录至博客专栏linux安装各种软件及配置环境教程中 方式一:yum方式下载安装 1.查找java相关的列表 yum -y li ...

  8. 创建Git仓库

    创建Git仓库 一.什么是版本仓库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能 ...

  9. [前端] VUE基础 (5) (过滤器、生命周期、钩子函数)

    一.过滤器 过滤器分为局部过滤器和全局过滤器. 1.局部过滤器 <body> <div id="app"> </div> <script ...

  10. Java--平台版本、跨平台、JVM、JDK、JRE

    Java2平台版本 Java2平台包括标准版(J2SE).企业版(J2EE)和微缩版(J2ME)三个版本 J2SE 包含那些构成Java语言核心的类. J2EE 包含J2SE 中的类,并且还包含用于开 ...