import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner (System.in);
int n=in.nextInt();
int m[]=new int[(int)1e5+1];
while(n-->0) {
int x=in.nextInt();
for(int i=2;i<=x/i;i++)
if(x%i==0) {
m[i]++;
while(x%i==0)x/=i;//将x中的i全部除掉
}
if(x>1)m[x]++;//x本省就是素数的情况
}
Arrays.sort(m);
if(m[m.length-1]==0)System.out.println(1);//所有数字都为1的情况
else System.out.println(m[m.length-1]);
}
}
知识点:分解质因数:就是把一个数分解成一个或多个素数的n次方的和;int的范围:2147483648~2147483647
思路:用数组存所有数字的公共质因数,找到最大的那个质因数即可。
公约数
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
Scanner in=new Scanner(System.in);
ArrayList<Long>x =new ArrayList<>();
long a=in.nextLong(),b=in.nextLong();
long big=gcd(a, b);
for(long i=1;i<=big/i;i++) { //试除法
if(big%i==0){
x.add(i);
if(i!=(big/i))x.add(big/i);
}
}
Collections.sort(x);
int q=in.nextInt();
while(q-->0) {
long j=in.nextLong(),k=in.nextLong();
int l=0,r=x.size()-1;
while(l<r) {
int mid=l+r+1>>1;
if(x.get(mid)<=k)l=mid;
else r=mid-1;
}
if(x.get(l)>k||x.get(l)<j)System.out.println(-1);
else System.out.println(x.get(l));
}
}
long gcd(long a,long b) {
return b>0?gcd(b, a%b):a;
}
}
思路:预处理先求出a,b的最大公约数,再试除法求出最大公约数的所有约数储存于数组,二分遍历这个数组,找出最接近或者等于该范围的最大值,此二分模板适用于找到小于等于该值