妈耶有日期显示啊,我还写什么。。。
给出N个正整数,找出N个数两两之间最大公约数的最大值。
例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5。
Input
第1行:一个数N,表示输入正整数的数量。(2 <= N <= 50000)
第2 - N + 1行:每行1个数,对应输入的正整数.(1 <= Sii <= 1000000)
Output
输出两两之间最大公约数的最大值。
Sample Input
4
9
15
25
16
Sample Output
5
思路:
1.做题的时候学长有提示用暴力求解,没毛病,可为什么我只过了1组数据啊QWQ,然后才发现这是一个有艺术的暴力orz。
2.代码是参照了别个的(完全一样好伐),还是很好理解的,就是开一个数组用下标及数组所表示的数来表示输入时出现的数极其个数。然后从最大的数开始倒着走一遍,然后每个数中,又从当前数(及外循环的数)走一遍到最大数,期间用一个temp(初始为0)判断有没有外循环的数的倍数出现。出现两次极其以上及找到了最大公因数(外循环的数),因为是从最大开始循环,所以只要找到即可。
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstdlib> 5 #include<cmath> 6 #include<cstring> 7 #include<string> 8 using namespace std; 9 const int maxn=1000000; 10 int a[maxn]; 11 int main() 12 { 13 int n; 14 cin>>n; 15 memset(a,0,sizeof(a)); 16 for(int i=1;i<=n;i++) 17 { 18 int x; 19 cin>>x; 20 a[x]++; 21 } 22 int ans; 23 for(int i=maxn;i>=1;i--) 24 { 25 int temp=0; 26 for(int j=i;j<maxn;j+=i) 27 { 28 temp+=a[j]; 29 if(temp>=2) 30 { 31 break; 32 } 33 } 34 if(temp>=2) 35 { 36 ans=i; 37 break; 38 } 39 } 40 cout<<ans<<endl; 41 return 0; 42 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)