蓝桥杯 算法训练 最大质因数(C语言)

蓝桥杯 算法训练 最大质因数(C语言)

资源限制
时间限制: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

#include
int primenumber(int n) { //判断是否是质数的函数 (prime number是质数的意思)
	int i;
	//1不是质数
	if(n==1) {
		return 0;
	}
	//2和3是质数
	else if(n==2 || n==3) {
		return 1;
	}
	//拿n除以从2开始到n的一半如果出现了可以整除的就要返回0,循环自动停止结束。
	else {
		for(i=2; i<=n/2; i++) {
			if(n%i==0) {
				return 0;
			}
		}
	}
	//全部都已经除过了,都没有返回,说明是一个质数。
	return 1;
}
int main() {
	int n;
	int i;
	int j;
	scanf("%d",&n);
	//动态定义数组
	int a[n];
	//输入数据
	for(i=0; i<n; i++) {
		scanf("%d",&a[i]);
	}
	int k=0;
	int max=0;
	int t=0;
	for(i=0; i<n; i++) {
		k=a[i];//k用来保存a[i],接下来要使用。
		for(j=2; k!=1; j++) {
			//k%j==0说明是因数 ,primenumber(j)==1说明是质数。
			if(k%j==0 && primenumber(j)==1) {
				if(j>max) {
					max=j;
					//t用来保存最大质因数的数组中的数的下标,最后要输出。
					t=i;
				}
				k=k/j;
				//j--意思是比如8=2*2*2,这样的数多个质因数有相同的情况。
				j--;
			}
		}
	}
	//输出拥有最大质因数的数组中的数
	printf("%d",a[t]);
	return 0;
}

你可能感兴趣的:(蓝桥杯 算法训练 最大质因数(C语言))