51nod 1179:最大的最大公约数

51nod 1179:最大的最大公约数

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1179

题目大意:给出$n$个数,求两两最大公因数的最大值.

数论

套路题,参见http://www.cnblogs.com/barrier/p/6656410.html

代码如下:

 1 #include <iostream>
 2 #define N 1000000
 3 using namespace std;
 4 typedef long long ll;
 5 ll n,t,vis[N+1],f[N+1];
 6 int main(void){
 7     std::ios::sync_with_stdio(false);
 8     cin>>n;
 9     for(int i=0;i<n;++i){
10         cin>>t;
11         vis[t]++;
12     }
13     for(ll i=1;i<=N;++i)
14         for(ll j=1;i*j<=N;++j)if(vis[i*j])
15             f[i]+=vis[i*j];
16     for(ll i=N;i>=0;--i)if(f[i]>1){
17         cout<<i;
18         return 0;
19     }
20 }
时间: 2024-08-06 20:00:59

51nod 1179:最大的最大公约数的相关文章

51nod 1179 最大的最大公约数 一种筛选的方法

1179 最大的最大公约数 题目来源: SGU 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 给出N个正整数,找出N个数两两之间最大公约数的最大值.例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5. Input 第1行:一个数N,表示输入正整数的数量.(2 <= N <= 50000) 第2 - N + 1行:每行1个数,对应输入的正整数.(1 <= S[i] <= 1000

51nod 1179 最大的最大公约数

给出N个正整数,找出N个数两两之间最大公约数的最大值.例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5. Input 第1行:一个数N,表示输入正整数的数量.(2 <= N <= 50000) 第2 - N + 1行:每行1个数,对应输入的正整数.(1 <= S[i] <= 1000000) Output 输出两两之间最大公约数的最大值. Input示例 4 9 15 25 16 Output示例 5 思路:尝试了两种方法,两种

51nod 1179 最大的最大公约数 (无耻的打表计数法)

题目: 考虑清楚就简单了,我们把每个数的因子计数. 两个数的公约数就是计数超过2的数,然后找到最大的那个就好了. 计算每个数的素因子,记得sqrt(),不然会超时. 打表计数法时间复杂度O(n*sqrt(n)). 代码: #include <iostream> #include <algorithm> #include <map> #include <vector> #include <set> #include <math.h> #

1179 最大的最大公约数

1179 最大的最大公约数 题目来源: SGU 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 给出N个正整数,找出N个数两两之间最大公约数的最大值.例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5. Input 第1行:一个数N,表示输入正整数的数量.(2 <= N <= 50000) 第2 - N + 1行:每行1个数,对应输入的正整数.(1 <= S[i] <= 1000000) Output 输出两两之

51 Nod 1179 最大的最大公约数(筛法)

题目链接:点我点我 题意:就是题目的名字 题解:从大往小筛一下就可以了,时间复杂度O( n* sqrt(max{num[i]}) ). 1 #include <cstring> 2 #include <iostream> 3 #include <algorithm> 4 using namespace std; 5 6 const int N=1000000+10; 7 int num[N]; 8 9 int main(){ 10 memset(num,0,sizeof

1011 最大公约数GCD(51NOD基础题)

1011 最大公约数GCD(51NOD基础题) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入2个正整数A,B,求A与B的最大公约数. Input 2个数A,B,中间用空格隔开.(1<= A,B <= 10^9) Output 输出A与B的最大公约数. Input示例 30 105 Output示例 15 /* <1> 循环实现 辗转相除法 <2> 递归实现 辗转相除法 */ #include <cstdio> #defi

51nod 1040 最大公约数之和 (数学)

给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6 1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 Input 1个数N(N <= 10^9) OutPut 公约数之和 Input示例 6 Output示例 15 AC代码: /** *@xiaoran *1 2 3 4 5 6 *1 2 3 2 1 6 *2个1,2个2,1个3,1个6,注意后面的值都是n的因子. *现在我们只需要计算出各个因子的个数就行了, *那么1的个数是与n互质的

51Nod 1040 最大公约数之和

                                 1040 最大公约数之和 给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6 1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 Input 1个数N(N <= 10^9) //实际上应该是n<=10^18 Output 公约数之和 Input示例 6 Output示例 15 欧拉函数 对于 样例 1 2 3 2 1 ----6 有2个1 2个2 和 1个3 两个1的情况

51nod 1011最大公约数GCD

1011 最大公约数GCD 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 输入2个正整数A,B,求A与B的最大公约数. Input 2个数A,B,中间用空格隔开.(1<= A,B <= 10^9) Output 输出A与B的最大公约数. Input示例 30 105 Output示例 15百度~辗转相除法,嗯,wrong了4遍(逃) #include<stdio.h> int gcd(int a,int b) { int t; if(