51Nod-1179 最大的最大公约数【暴力】
来源:互联网 发布:uc2监控软件账号注册 编辑:程序博客网 时间:2024/04/29 21:50
1179 最大的最大公约数
基准时间限制: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] <= 1000000)
Output
输出两两之间最大公约数的最大值。
Input示例
49152516
Output示例
5
问题链接:1179 最大的最大公约数
问题分析:
按照题意,对于给定的整数两两求其最大公约数是一种暴力,然而时间上不可接受,因为其计算复杂度是O(n*n)。
换一种暴力也许计算复杂度会有所降低,不会随着N的增大而增大。这就是从最大的s[i]<=1000000开始试探,逐步减小找到最大的最大公约数。
上述过程中,主要是看各个数的倍数(包括倍数为1的)是否与之相等,有两个相等的则找到了所求的答案。
题记:两权相害取其轻。
AC的C++程序如下:
#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int N = 1000000;int siflag[N+1];int main(){ int n, i, si, maxsi; memset(siflag, 0, sizeof(siflag)); scanf("%d", &n); maxsi = 0; for(i=1; i<=n; i++) { scanf("%d", &si); siflag[si]++; maxsi = max(maxsi, si); } for(i=maxsi; i>=1; i--) { int count = 0; for(int j=i; j<=maxsi; j+=i) { count += siflag[j]; if(count >= 2) break; } if(count >= 2) break; } printf("%d\n", i); return 0;}
阅读全文
0 0
- 51Nod-1179 最大的最大公约数【暴力】
- 51nod 1179:最大的最大公约数
- 51nod-1179-最大的最大公约数
- 51NOD 1179 最大的最大公约数
- 51nod:1179 最大的最大公约数
- 51nod-1179 最大的最大公约数
- 51nod 1179 最大的最大公约数
- 51nod 1179 最大的最大公约数
- 51Nod 1179 最大的最大公约数
- 51nod 1179 最大的最大公约数
- 51Nod 1179 最大的最大公约数
- 51nod 1179 最大的最大公约数
- 51nod 1179 最大的最大公约数
- 51nod 1179 最大的最大公约数 -Zero
- 51nod 1179 最大的最大公约数
- 51Nod 1179 最大的最大公约数
- 51nod-1179-最大的最大公约数
- 51nod 1179 最大的最大公约数
- /\/\/\/\/\
- GitHub完美适配Visual Studio-03 更改
- 51Nod-1018 排序【排序】
- spring中多数据源配置
- Java多线程
- 51Nod-1179 最大的最大公约数【暴力】
- Java锁
- linux笔记
- spring中多数据配置2
- Java的jvm原理
- 基于注解spring中多数据源配置
- jvm
- 存储过程
- oracle触发器