递归训练:素因子分解(分析子问题)
【问题描述】
给定某个正整数 N,求其素因子分解结果
输入格式:
输入long int范围内的正整数 N。
输出格式:
按给定格式输出N的素因式分解表达式,即 N=p1k1*p2k2*…*pm^km,其中pi为素因子并要求由小到大输出,指数ki为pi的个数;当ki为1即因子pi只有一个时不输出ki。
输入样例:
1323
输出样例:
1323=3^3 * 7^2
【思路】
本题你当然可以用循环暴力去求解,但我不喜欢那样,我觉得从递归的角度思考这一题更加有趣。正如我说的,做递归题关键在于分析它的子问题,每一个递归问题的求解都是建立在子问题被解决的基础之上的,这是核心思想!通过这一题的训练,可以很好的锻炼我们寻找子问题的能力。
题目要求对一个数n进行素因子分解,好,那我就依照题意,设 f( n ) 就表示输出正整数n的素因子分解情况。那么如何分析子问题呢?我们以1323为例,如果你已经会打印49(7 ^ 2)的素因子分解式,那么我们只需要在打印49的分解式之前打印3 ^ 3, 分解1323的任务实际上就完成了!
所以递归式大概就是:f(n) = 打印a^b + f(n / a ^ b) (a是正整数n可以分解出的一个质因数,b是该质因数的幂),a和b也是很好求的。
分析可能看起来有点啰嗦,直接上AC代码:
#include<iostream>
using namespace std;
#define ll long longll d;void f(ll n)
{ ll i = 0;ll a = 0; //底数 ll p = 0; //幂 for(i = 2;i * i <= d;i++) //从小到大枚举,找出一个可分解的质因数{while(n % i == 0) //算该质因数幂的过程{a = i;p++;n /= i;}if(p != 0) //一旦找到就跳出break;}if(p != 0){if(n != 1) //边界在后面 , n == 1 就不继续调用了 {if(p != 1)cout << a << "^" << p << "*";elsecout << a << "*";f(n); //n已经自我除掉了一部分,递归打印剩余部分就可以 }else //n == 1{if(p != 1)cout << a << "^" << p; //直接输出就行了elsecout << a;} } else //如果找不到质因数来分解,直接输出自己 {cout << n;}
}int main()
{ll n;cin >> n;cout << n << "=";d = n;f(n);return 0;
}
运行结果:
递归训练:素因子分解(分析子问题)相关推荐
- 【编译原理笔记09】语法制导翻译:语法制导翻译方案,在非递归的预测分析过程中进行翻译
本次笔记内容: 5-5 语法制导翻译方案 5-6 在非递归的预测分析过程中进行翻译 本节课幻灯片,见于我的 GitHub 仓库:第9讲 语法制导翻译_2 文章目录 语法制导翻译方案 语法制导翻译方案 ...
- c语言折半查找递归程序,C语言数据结构中二分查找递归非递归实现并分析
C语言数据结构中二分查找递归非递归实现并分析 前言: 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高.因此较为受我们追捧.其实二分查找算法,是一个很经典的算法.但是呢,又容易写错.因为总是考 ...
- 【编译原理笔记05】语法分析:FIRST集和FOLLOW集的计算,[非]递归的预测分析法,预测分析中的错误处理
本次笔记内容: 4-4 FIRST集和FOLLOW集 4-5 递归的预测分析法 4-6 非递归的预测分析法 4-7 预测分析法中的错误处理 本节课幻灯片,见于我的 GitHub 仓库:第5讲 语法分析 ...
- 对抗训练理论分析:自适应步长快速对抗训练
©PaperWeekly 原创 · 作者 | 鬼谷子 引言 该论文是关于对抗训练理论分析性的文章,目前对抗训练及其变体已被证明是抵御对抗攻击的最有效防御手段,但对抗训练的过程极其缓慢使其难以扩展到像 ...
- 汉诺塔递归问题的分析与Python实现
背景 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到小按顺序放置64个金盘(如图).游戏的目标:把A杆上的金盘 ...
- 训练图像识别神经网络,神经网络训练结果分析
哪些神经网络可以用在图像特征提取上 BP神经网络.离散Hopfield网络.LVQ神经网络等等都可以. 1.BP(BackPropagation)神经网络是1986年由Rumelhart和McCell ...
- java 递归原理_Java中递归原理实例分析
本文实例分析了Java中递归原理.分享给大家供大家参考.具体分析如下: 解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中 ...
- lstm训练情感分析的优点_LSTM对电影评论进行简单的情感分析
今天自己尝试使用LSTM对电影评论进行简单的情感分析 代码中npy文件: 代码使用的数据集是IMDB,网盘地址: 首先读取已经做好的词向量模型 import numpy as np # 这里有两个表, ...
- java递归获取所有的子级节点
public class VltavaWisdomMapType { //站点id private String id; //子级集合 private List< ...
最新文章
- 2019牛客暑期多校训练营(第三场)
- 从VR到元宇宙:回顾30年,改变虚拟现实的18件大事
- 笔记,Vector类模板的基本功能
- 【C++深度剖析教程38】类模板深度剖析
- 嘘!你与谷歌语音助手的对话,可能已经泄露……
- 神调侃!程序员必学推荐系统,我比女朋友更了解你!
- 论文记载:A Survey on Traffic Signal Control Methods
- linux 怎么查内存大小,linux如何查内存大小
- presenting view controller
- shiro的anon失效问题
- Bsnet:Bi-Similarity Network for Few-shot Fine-grained Image Classification论文复现
- Nuxt在SPA模式下的鉴权处理(1)
- JEECG容器化部署:Alpine镜像方式
- 0503《软件工程》的简单小总结与展望
- C51模拟PS2键盘(一)
- lqc_使用SNAT、DNAT策略实现网关应用
- python中time模块中的倒计时_python中的计时器timeit的使用方法
- 【CUDA编程笔记】(2)CPU与GPU之间的参数传递
- 公交车到站预测2----数据后处理
- 最新NVIDIA Ada Lovelace架构 和 RTX 40系列详解