【问题描述】
任意输入两个正整数m,n(1<m<n<=5000),依次输出m到n之间每个数的最大质因子(包括m和n;如果某个数本身是质数,则输出这个数自身)。
【输入格式】:
一行,包含两个正整数m和n,其间以单个空格间隔。
【输出格式】:
一行,每个整数的最大质因子,以逗号间隔。
【输入样例】:
5 10
【输出样例】:
5,3,7,2,3,5
【参考程序】
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
bool prime(int x) {
if (x <= 1) {
return false;
}
for (int i=2; i<=sqrt(x); i++) {
if (x % i == 0) {
return false;
}
}
return true;
}
int main() {
int m, n;
cin >> m >> n;
for (int i=m; i<=n; i++) { // 枚举从m~n的所有整数
for (int j=i; j>=2; j--) { // 找每个数的最大质因子,从大到小找
if ((i%j==0) && prime(j)) { // 找到最大质因子
cout << j;
if (i != n) { // 输出,以逗号分隔
cout << ",";
}
break;
}
}
}
return 0;
}