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

代码如下:

#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. 吴裕雄--天生自然TensorFlow2教程:维度变换

    图片视图 [b, 28, 28] # 保存b张图片,28行,28列(保存数据一般行优先),图片的数据没有被破坏 [b, 28*28] # 保存b张图片,不考虑图片的行和列,只保存图片的数据,不关注图片 ...

  2. Oracle之纵向数据转换横向数据

    资源二  来源  http://www.cnblogs.com/gkl0818/archive/2009/02/25/1398078.html 1.固定列数的行列转换如student subject ...

  3. Web前端学习方向

    第一部分 HTML 第一章 职业规划和前景 职业方向规划定位: web前端开发工程师 web网站架构师 自己创业 转岗管理或其他 web前端开发的前景展望: 未来IT行业企业需求最多的人才 结合最新的 ...

  4. 用JS打开新窗口,防止被浏览器阻止的方法

    相信做web前端或者使用JS的朋友都会遇到需要在新窗口打开页面的情况,现在浏览器大都具有弹出窗口拦截功能,所以传统的window.open()不再那么好用了.借鉴于网上查到的方法和我个人的实践,把弹出 ...

  5. JS控制 input 输入字符限制全搜集

    ENTER键可以让光标移到下一个输入框 <input onkeydown="if(event.keyCode==13)event.keyCode=9" > 只能是中文 ...

  6. 通过Dockerfile 文件为linux images 添加新用户

    要求: (1)增加一个新用户,名为mynewuser (2)让这个用户有root权限 (3)设置其密码为mynewpassword (4)Container启动后以mynewuser登录,并且直接到m ...

  7. screen模式下鼠标无法滚动【问题】

    忍了很久, 终于查到原因了. 回滚模式: CTRL+A (释放), [ 切换模式: CTRL+ C 参考: https://serverfault.com/questions/206303/how-t ...

  8. sftp安装(linux)

    --整理于网络 1. 查看openssh版本ssh -Vopenssh版本必须大于4.8p12. 创建sftp组groupadd sftp3. 创建sftp用户useradd -g sftp -s / ...

  9. 吴裕雄--天生自然TensorFlow高层封装:Keras-多输入输出

    # 1. 数据预处理. import keras from keras.models import Model from keras.datasets import mnist from keras. ...

  10. 黑科技如何制造人类V2.0?

    黑科技泛指人类尚未成熟但具有巨大潜力的科学技术,智能手机.大数据.扫码支付.电子地图等等都曾属于黑科技范畴,随着时间的推移,它们慢慢成熟,且展现出巨大的能力,影响人类进程,最终黑科技转变成人类伟大的创 ...