2018-05-16　10:56:42　最大　的　质因子　。输入一个整数n,求n的　最大　的　质因子　。　=　5000),依次输出m到n之间每个数的　最大质因子　(包括m和n;如果某个数本身是质数,则输出这个数自身)。　输入　一行,包含两个正整数m和n,其间以单个空格间隔。　输出　一行,每个整数的　最大质因子　,以逗号间隔。　样例...　描述　任意输入两个正整数m,　n　(1　<　m　<　n　<=　5000),依次输出m到n之间每个数的最大质因子(包括m和n;如果某个数本身是质数,则输出这个数自身)。　输入　一行,包含两个正整数m和n,其间以单个空格间隔。　输出　一行,每个整数的最大质因子,以逗号间隔。　样例输入　解题　判断好素数即可　代码　#　include　　#　include　　using　namespace　std　;　bool　ss　(　int　n　)　{　//判断素数　for　(　int　i　=　2　;　i　<=　sqrt　(　n　)　;　++　i　)　{　if　(　n　%　i　==　0　)　return　false　;　}　return　true　;　}　int　main　(　)　{　int　m　,　n　;　bool　flag　=　true　;　cin　>>　m　>>　n　;　for　(　int　i　=　m　;　i　<=　n　;　++　i　)　{　if　(　flag　)　{　//,删除　flag　=　false　;　}　else　{　cout　if　(　ss　(　i　)　)　cout　<<　i　;　else　{　//得到最大质因子　for　(　int　j　=　i　/　2　;　j　>=　2　;　--　j　)　{　if　(　i　%　j　==　0　&&　ss　(　j　)　)　{　cout　<<　j　;　break　最大质因子　的递归解法&Python:　问题描述:　求一个任意正整数的　最大质因子　,呈上代码及注释:　#　最大质因子　def　calc(x:int)->int:#　函数参数类型设置以及返回值类型设置　if　x==1:##　如果这个数字是1,则...　最大质因子的递归解法&Python:　问题描述:　求一个任意正整数的最大质因子,呈上代码及注释:　#　最大质因子def　calc　(　x　:　int　)　->　int　:　#　函数参数类型设置以及返回值类型设置　if　x　==　1　:　##　如果这个数字是　1　,则最大质因子一定是　1　,毋庸置疑　return　1　for　i　in　range　(　2　,　x　)　:　##　如果这个数字不是　1　,就从　2　开始,一直找到这个数字的前一个数字,寻找　if　x　%　i　==　0　:　##　这个数字的最小的因子,然后将这个数字除以最小的因子,再将结果的最大质因子返回给调用者　return　calc　(　int　(　x　/　i　)　)　return　x##　如果数字既不是　1　,又没有　1　和其本身之外的任何因子,那么这个数字本身就是最大质因子　print　(　calc　(　600851475143　)　)　递归思想、代码及注释分析:　代码部分是非常简单易懂的,都是些基础的python语法,我要讲的是注释部分,注释部分是基于我个人对于递归的理解写出来的,在此跟大家分享我对于递归的拙见。　首先,在递归解决问题的过程中,每次的递归都是重复着只有参数不同的工作,所以即使是在递归函数仅仅只写了一个函数定义的时候,我们就可以假定它已经完全可以胜任我们所需要的工作了,接下来,我们给它设置一个出口,让它可以在最简单的情况下直接完成工作,本例中就是x==1的情况;最简单的情况完成之后,我们就可以开始研究比较复杂的情况了,这个要具体问题具体分析,我们已经假定它完全可以胜任我们所需要的工作,所以在本例中,我们找到x的最小因子之后,直接将x除以这个最小因子,然后求出这个结果的最大质因子(注意这一步就是我们之前提到的“假定它完全可以胜任我们所需要的工作”,直接把需求丢给函数,至于怎么完成的,我不需要知道),而这个最大质因子就是我们要的答案;最后不要忘了遗漏可能存在的特殊情况,本例中就是x为质数的情况。　笔者觉得递归的难点只在于逻辑的层层嵌套,但其实我们完全可以不用让自己的思路进入递归,我们只在外层逻辑上干好我们每一步的任务,至于实际上是怎么完成的,我并不需要知道。　为何要从除法的结果里面寻找最大质因子:　关于除1和本身之外的最小因子,和最大质因子的关系,我并没有总结出结论,　实际上这个最小因子必定是个质数,而且最小因子一定是小于等于最大质因子的　。那为什么要用x除以最小因子,然后再在结果中寻找x的最大质因子呢?我是这样想的,因为最大质因子,首先它是个质数,就像是沙子中的最大石块,我们无论怎么过滤掉沙子,石块也依然存在,我们设置寻找最小因子的范围是2到x-1,　如果最小因子等于最大质因子,那么除法的结果里面既没有更大的质因子,又没有小于最大质因子的因子,也就是说,除法的结果只能是最大质因子的n次方;如果最小因子小于最大质因子,那么除法结果里面就必定包含最大质因子　,所以在我们对x进行除法之后,这个石块依然在除法的结果中,我们进行的除法,只是起到了过滤筛的作用,还是那句话,我们假定函数完全可以胜任我们所需要的工作,只需要把参数丢给它,我们只需要确定的是参数的正确性,而我们已经确定了石块就在我们传递的参数内,所以拿到正确结果也是理所当然。　21:　最大质因子　序列 点击打开链接总时间限制: 1000ms 内存限制: 65536kB描述任意输入两个正整数m,　n　(1　<　m　<　n　<=　5000),依次输出m到n之间每个数的　最大质因子　(包括m和n;如果某个数本身...　21:最大质因子序列 　 　 点击打开链接总时间限制: 1000ms 内存限制: 65536kB　描述　任意输入两个正整数m,　n　(1　<　m　<　n　<=　5000),依次输出m到n之间每个数的最大质因子(包括m和n;如果某个数本身是质数,则输出这个数自身)　。　输入　一行,包含两个正整数m和n,其间以单个空格间隔。　输出　一行,每个整数的最大质因子,以逗号间隔　。　样例输入　5　10　样例输出　5,3,7,2,3,5　来源　元培-From　Whf　题型/思路　 　 　 简单质因子求解的应用。　AC代码　#include　#includeusing　namespace　std;const　int　nmax=5000+10;int　a[nmax];//存放每个数的质因数序列int　b[nmax];//存放m~n这些数的最大质因数的序列　int　cal(int　n){　int　len=0;　for(int　i=2;i<=n;i++){　if(n%i==0){　len++;　a[len]=i;　}　while(n%i==0){　n=n/i;　}　}　//返回最大的质因数　return　a[len];}int　main(int　argc,　char**　argv)　{　int　m,n;　cin>>m>>n;　memset(a,0,sizeof(a));　for(int　i=0;i　1;　++i)　{　//　如果　n　能被　i　整除　//　说明此时最大的质因数是　i　if　(n　%　i　==　0)　{　n　/=　i;　求一个数的最大质因子　function　maxPrimeFactor(n)　{　var　pf　=　1;　//　最大质因数　for　(var　i　=　2;　n　>　1;　++i)　{　//　如果　n　能被　i　整除　//　说明此时最大的质因数是　i　if　(n　%　i　==　0)　{　n　/=　i;　pf　=　i;　//　循环用　n　除以　i,直到不能除尽为止　//　保证了　i　是一个质数　while　(n　%　i　==　0)　{　n　/=　i;　}　}　}　return　pf;}　1410:　最大质因子　序列　【题目描述】　任意输入两个正整数m,n(1