试题 算法训练 最大质因数
时间限制:1.0s 内存限制:256.0MB
问题描述
***
给出N个数字,求出有最大的最大质因数的那个数
输入格式
第一行:一个整数N。
接下来的N行,每行一个整数A_i,表示给出的那N个数字。
输出格式
第一行:一个整数,拥有最大的最大质因数的那个数。
样例输入
4
36
38
40
42
样例输出
38
数据规模和约定
60%的数据满足:N<=100
100%的数据满足:N<=2500,A_i<=20000~~(感觉欸数据有点弱)~~
提交代码
编译语言: C++
代码:
#include<iostream>
using namespace std;
int max_primefactor(int a)
{
for(int i=2;i*i<=a;i++)
{
while(a%i==0)a/=i;
if(a==1)return i;//返回i为最大质因数
}
return a;//if(a!=0),则多此除以i的a大于原a的平方根,此a为最大质音数
}
int main()
{
int n,a,m=0,ret=0;
cin>>n;
while(n--){
cin>>a;
int t=max_primefactor(a);
if(t>m)
{
m=t;
ret=a;
}
}
cout<<ret;
}
这是小龙能做出来的最好方法和最少代码了,如果函数名写少一点,代码长度能缩减到250B。
#include<iostream>
using namespace std;
int p(int a){
for(int i=2;i*i<=a;i++){
while(a%i==0)a/=i;
if(a==1)a=i;
}
return a;
}
int main(){
int n,a,m=0,r=0;cin>>n;
while(n--){
cin>>a;
if(p(a)>m)m=p(a),r=a;
}
cout<<r;
}
注意:
此题数据范围很小,完全可以暴力,函数也可以不要。哈哈不要夸我水题(&^&);
此外推荐别人另外一遍此题解https://blog.csdn.net/weixin_41482676/article/details/10597_group&spm=1018.2226.3001.4187