Codecraft-17 and Codeforces Round #391 - B
题目链接:http://codeforces.com/contest/757/problem/B
题意:给定n个数字,问最多能选个多少个数字使得选出来的数字的gcd!=1。
思路:由于数字最大为1e5,所以答案肯定是gcd为素数的个数最多,因为合数总能分解成素数的乘积。可以对每个数字进行素因子分解,最后看哪个因子出现的次数最多就是答案了。
import java.io.PrintWriter; import java.util.*; public class Main { public static final int MAXN=100000+10; public static int cnt[]=new int[MAXN]; public static int ans; public static void fac(int x){ for(int i=2;i*i<=x;i++){ if(x%i==0){ cnt[i]++; ans=Math.max(ans, cnt[i]); while(x%i==0){ x/=i; } } } if(x!=1){ cnt[x]++; ans=Math.max(ans, cnt[x]); } } public static void main(String[] args) { Scanner cin = new Scanner(System.in); PrintWriter out = new PrintWriter(System.out); int n=cin.nextInt(); ans=1; Arrays.fill(cnt, 0); for(int i=0;i<n;i++){ fac(cin.nextInt()); } out.println(ans); cin.close(); out.flush(); } }