51nod 1179 最大的最大公约数 (无耻的打表计数法)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 1179 最大的最大公约数 (无耻的打表计数法)相关的知识,希望对你有一定的参考价值。
题目:
考虑清楚就简单了,我们把每个数的因子计数。
两个数的公约数就是计数超过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 最大的最大公约数 (无耻的打表计数法)的主要内容,如果未能解决你的问题,请参考以下文章