标签:inf .com 公约数 div idt alt end lib logs
题目:
考虑清楚就简单了,我们把每个数的因子计数。
两个数的公约数就是计数超过2的数,然后找到最大的那个就好了。
计算每个数的素因子,记得sqrt(),不然会超时。
打表计数法时间复杂度O(n*sqrt(n))。
代码:
#include <iostream> #include <algorithm> #include <map> #include <vector> #include <set> #include <math.h> #include <queue> #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <string> using namespace std; typedef long long ll; #define INF 2147483647 int n; int a[1000010]; int main(){ cin >> n; int key; int ans = 1; while(n--){ cin >> key; int p = sqrt(key); for(int i = 1;i <= p; i++){ if(key%i == 0){ a[i]++; a[key/i]++; // cout << i << endl; } } } for(int i = 2;i <= 1000000; i++){ if(a[i] >= 2){ ans = i; } } cout << ans << endl; return 0; }
51nod 1179 最大的最大公约数 (无耻的打表计数法)
标签:inf .com 公约数 div idt alt end lib logs
原文地址:http://www.cnblogs.com/zhangjiuding/p/7906498.html