问题描述:
约翰的农场开始渐入正轨了,因为他给每头奶牛贴上了清晰的序列号标签。不幸的是,奶牛们私下里认为有一些序列号比较好,一头牛的序列号如果有比其他奶牛都高的素因子,那它就有最高的社会地位。
现在给出N个序列号,每个序列号的范围在1-20000之间,请编程确定谁有最大的素因子。如果没有素因子,则输出0。
输入格式:
第1行一个正整数N,1<=N<=5000。
第2-N+1行,每行一个正整数,表示一个序列号。
输出格式:
一行一个正整数,表示具有最大素因子的序列号。如果有多个这样的序列号,则输出输入数据中较早输入的数。
输入样例:
4
36
38
40
42
输出样例:
38
#include<iostream>
using namespace std;
int a[5000];
//判断n是否为素数
bool sushu(int n){
int i,k=1;
for(i=2;i*i<=n;i++)
if(n%i==0)
{
k=0;
break;
}
if(k) return true;
else return false;
}
//求自然数n的最大素因子
int maxsuyinzi(int n){
int i,yinzi=0;
for(i=2;i<=n/2;i++)
if(n%i==0&&sushu(i))
yinzi=i;
return yinzi;
}
int main(){
int n,m,i,yinzi=0,t=0;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a[i];
//对输入的每个数字,比较之前的最大素因子是否比现在这个数字的最大素因子小
//如果小,t记录当前数字值
if(yinzi<maxsuyinzi(a[i]))
{
t=a[i];
yinzi=maxsuyinzi(a[i]);
}
}
if(yinzi==0)
cout<<0<<endl;
else
cout<<t<<endl;
return 0;
}