【题目描述】
任意输入两个正整数m,n(1<m<n≤5000)
,依次输出m到n之间每个数的最大质因子(包括m和n
;如果某个数本身是质数,则输出这个数自身)。
【输入】
一行,包含两个正整数m
和n
,其间以单个空格间隔。
【输出】
一行,每个整数的最大质因子,以逗号间隔。
【输入样例】
5 10
【输出样例】
5,3,7,2,3,5
#include<iostream>
#include<cmath>
using namespace std;
bool isPrime(int n)//判断大于等于2的整数n是否是质数
{
for(int i = 2; i <= sqrt(n); ++i)
if(n%i == 0)
return false;
return true;
}
int maxPrimeFactor(int n)//求n的最大质因子
{
for(int i = n; i >= 2; --i)//从大到小遍历
if(n%i == 0 && isPrime(i))
return i;
}
int main()
{
int m, n;
cin >> m >> n;
bool isFirst = true;//标志位:是否是第一个输出的数字
for(int i = m; i <= n; ++i)
{
if(isFirst)
isFirst = false;
else
cout<<',';
cout << maxPrimeFactor(i);
}
return 0;
}