试题 算法训练 最大质因数

一.题目

问题描述
  给出N个数字,求出有最大的最大质因数的那个数
输入格式
  第一行:一个整数N。
  接下来的N行,每行一个整数A_i,表示给出的那N个数字。
输出格式
  第一行:一个整数,拥有最大的最大质因数的那个数。
样例输入
4
36
38
40
42
样例输出
38
数据规模和约定
  60%的数据满足:N<=100
  100%的数据满足:N<=2500,A_i<=20000

二.解决

思路:使用该数的因数对该数进行分解,再继续对分解后的数求最大质因数,缩小计算量

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t;
ll n,ans1;

ll get_div(ll num)//获得最大的质因数
{
    ll i = 2;
    while(i*i<=num){
        if (num%i==0) ans1=i;
        while (num%i==0) num/=i;
        i++;
    }
    if(num!=1) ans1=num;
    return ans1;
}

int main()
{
    cin>>t;
    ll ans=0,max_t=0,temp;
    for(int i=1;i<=t;i++){
        cin>>n;
        if(n==1) temp=1;
        else temp=get_div(n);
        if(temp>max_t)    max_t=temp,ans=n;
        //cout<<temp<<endl;
    }
    cout<<ans<<endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Aiahtwo/p/12811274.html