题目部分:
1410:最大质因子序列时间限制: 1000 ms 内存限制: 65536 KB 提交数: 22040 通过数: 15056 【题目描述】任意输入两个正整数m,n(1<m<n≤5000),依次输出mm到nn之间每个数的最大质因子(包括m和n;如果某个数本身是质数,则输出这个数自身)。 【输入】一行,包含两个正整数m和n,其间以单个空格间隔。 【输出】一行,每个整数的最大质因子,以逗号间隔。 【输入样例】5 10 【输出样例】5,3,7,2,3,5 |
思路:
首先,我们要从小问题解决,我们先来思考一下,我们要怎么判断一个数n的最大质因子?
聪明的读者肯定会想到,我们先写一个函数,判断一个数是不是质数,然后我们从n遍历到2(最小的质因子是2)如果找到一个数能整除n,并且是质数,那就找到了最大质因子
代码是这样的:
int f(long long a){//判断是不是质数
if(a==1)return 0;
for(int i=2;i<=sqrt(a);i++)
if(a%i==0)
return 0;
return 1;
}
void pd(int a){//输出某个数的最大质因子
for(int i=a;i>=2;i--){//从a到2
if(f(i)==1&&a%i==0){//是质数且能整除n
cout<<i;return;//直接输出,果断结束
}
}
}
那你都会找一个数的最大质因子了,那找一堆书的最大质因子,应该很简单吧?
我们遍历a到b,输出a到b之间的每个数的最大质因子,如果i!=b那就输出逗号
具体来看代码
代码:
#include<bits/stdc++.h>
using namespace std;
int f(long long a){//判断是不是质数
if(a==1)return 0;
for(int i=2;i<=sqrt(a);i++)
if(a%i==0)
return 0;
return 1;
}
void pd(int a){//输出某个数的最大质因子
for(int i=a;i>=2;i--){//从a到2
if(f(i)==1&&a%i==0){//是质数且能整除n
cout<<i;return;//直接输出,果断结束
}
}
}
int main(){
int a,b;
cin>>a>>b;//读入
for(int i=a;i<=b;i++){//遍历a到b
pd(i);//输出i的最大质因子
if(i!=b){//如果i!=最大的b,说明我们现在找最大质因子的这个数,不是最后一个数
//具体来说,我们找了a、a+1、a+2、……b,如果我们没有找到b,就可以输出逗号
cout<<",";
}
}
return 0;
}
你有学会吗?
为什么我感觉会有人没听懂?