总时间限制:
1000ms
内存限制:
65536kB
描述
任意输入两个正整数m, n (1 < m < n <= 5000),依次输出m到n之间每个数的最大质因子(包括m和n;如果某个数本身是质数,则输出这个数自身)。
输入
一行,包含两个正整数m和n,其间以单个空格间隔。
输出
一行,每个整数的最大质因子,以逗号间隔。
样例输入
5 10
样例输出
5,3,7,2,3,5
这个题目的话,预处理一下质数数组,那么运行的效率会有一个比较大的提高,还是属于比较简单,也没有什么坑,一直就AC了。
#include<bits/stdc++.h>
using namespace std;
int a[1000];
int s[5000];
int t=1;
void get(int n)
{
for(int i=2;i<=n;i++)
{
if(!s[i]) //i不是质数
{
a[t]=i; //加入到质数数组
t++; //个数加一
for(int j=i*i;j<=n;j=j+i) //筛选到当前数的倍数
{
s[j]=1;
}
}
}
}
int f(int n)
{
for(int j=t-1;j>=0;j--) //从最大的数质数开始筛选
{
if(n%a[j]==0)
return a[j];
}
}
int main()
{
int m,n;
cin>>m>>n;
get(5000);
for(int i=m;i<n;i++)
{
cout<<f(i)<<',';
}
cout<<f(n);
cout<<endl;
}