21:最大质因子序列
总时间限制:
1000ms
内存限制:
65536kB
描述
任意输入两个正整数m, n (1 < m < n <= 5000),依次输出m到n之间每个数的最大质因子(包括m和n;如果某个数本身是质数,则输出这个数自身)。
输入
一行,包含两个正整数m和n,其间以单个空格间隔。
输出
一行,每个整数的最大质因子,以逗号间隔。
样例输入
5 10
样例输出
5,3,7,2,3,5
思路:1.用一个查找最大质因子的函数,并返回最大值。
2.首先看因为时m~n之间的数,所以避免重复计算,使用函数。
3.在函数中先找数的因数,有因为数最大质因数,所以找因数就从大到小。
4.之后判断因数是不是质数(感觉我这个代码复杂了些,你们如果找到了这个因数就可以跳出循环直接返回值。不要在判断了。)
5.在主函数用数组接收返回的最大质因子。如果不是位于最后一个,输出数字同时输出 ','(逗号)。
#include<bits/stdc++.h>
using namespace std;
int search(int n)
{
int i,j,max=2,k;
for(i=n;i>=2;i--){//本来想递增的,但题目要找最大的,避免计算慢,就递减了
if(n%i==0){
k=1;
for(j=2;j<=sqrt(i);j++){
if(i%j==0){
k=0;
break;
}
}
if(k==1){
if(max<i){
max=i;
}
}
}
}
return max;
}
int main()
{
int m,n;
scanf("%d%d",&m,&n);
int i;
int a[n-m+1],k=0;
for(i=m;i<=n;i++){
a[k++]=search(i);
}
for(i=0;i<k;i++){
printf("%d",a[i]);
if(i!=k-1){
printf(",");
}
}
return 0;
}