最大比例(辗转相除)
最大比例
X星球的某个大奖赛设了M级奖励。每个级别的奖金是一个正整数。
并且,相邻的两个级别间的比例是个固定值。
也就是说:所有级别的奖金数构成了一个等比数列。比如:
16,24,36,54
其等比值为:3/2
现在,我们随机调查了一些获奖者的奖金数。
请你据此推算可能的最大的等比值。
输入格式:
第一行为数字 N
第二行N个正整数Xi(Xi<1 000 000 000 000),用空格分开。每个整数表示调查到的某人的奖金数额
要求输出:
一个形如A/B的分数,要求A、B互质。表示可能的最大比例系数
测试数据保证了输入格式正确,并且最大比例是存在的。
例如,输入:
3
1250 200 32
程序应该输出:
25/4
再例如,输入:
4
3125 32 32 200
程序应该输出:
5/2
再例如,输入:
3
549755813888 524288 2
程序应该输出:
4/1
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 3000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
解析:题意很好懂,关键是怎么求a(a可以求若干次方得到两个数),这里用辗转相除就好了
#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define pb push_back
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rep1(i,b,a) for(int i=b;i>=a;i--)
using namespace std;
const int N=110;
ll arr[N];
ll gcd(ll a,ll b)
{if(a<b)swap(a,b);return b==0?a:gcd(b,a%b);
}
ll fi(ll a,ll b)
{if(a<b)swap(a,b);if(a==b)return a;elsereturn fi(b,a/b);
}
int main()
{int n;cin>>n;set<ll>st;rep(i,0,n){ll a;cin>>a;st.insert(a);}int cnt=0;for(set<long long>::iterator it=st.begin();it!=st.end();it++){arr[cnt++]=*it;}if(cnt==1){cout<<"1/1"<<endl;return 0;}ll e=gcd(arr[0],arr[1]);ll a=arr[0]/e,b=arr[1]/e,c,d;for(int i=1;i<cnt-1;i++){e=gcd(arr[i],arr[i+1]);c=arr[i]/e;d=arr[i+1]/e;a=fi(a,c);b=fi(b,d);}cout<<b<<"/"<<a<<endl;return 0;
}
转载于:https://www.cnblogs.com/ffgcc/p/10546467.html
最大比例(辗转相除)相关推荐
- 辗转相除以及辗转相减法
文章目录 前言 辗转相除法(又名欧几里算法) 辗转相减法(又名更相减损法) 原始辗转相减法 改版辗转相减法(减的是指数) 参考文章 前言 在学习Acwing c++蓝桥杯辅导课第八讲数论-AcWing ...
- c语言求出两个最大素数,求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法。通式分别为 f(x, y) = f(y, x%y...
求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y), f(x, y) = f(y, x - y) ( ...
- C语言 递归实现辗转相除法 和 辗转相减法
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里德算法,是这样进行的: 1997 / 615 = 3 (余 152) 615 / 152 = 4(余7) 152 / 7 = 21(余 ...
- 辗转相除求最大公约数
描述:计算两个非负整数 p 和 q 的最大公约数:若 q 是 0,则最大公约数为 p.否则,将 p 除以 q 得到余数 r,p 和 q 的最大公约数即为 q 和 r 的最大公约数. <span ...
- [Luogu1891]疯狂LCM[辗转相减法]
题意 多组询问,每次给定 \(n\) ,求:\(\sum_{i=1}^nlcm(i,n)\) . \(\rm T \leq 3\times 10^4\ ,n \leq 10^6\). 分析 推式子: ...
- bzoj1876 [SDOI2009]SuperGCD 辗转相减+高精
这个题是给有数竞基础的人出的吧,不然没法做 辗转相减法+优化,这个题卡时,要压1000 注: 1.赋值顺序 2.特判 3.手残 码: #include<iostream> #include ...
- 求最大公约数(辗转相除)
在辗转相除求最大公约数的时候,不需要 判断这两个数的大小 #include<stdio.h> int gcd(int m,int n);int main() {int m,n;scanf( ...
- 【C/C++】最大公约数和最小公倍数(辗转相除、更相减损、stein)
一.最大公约数和最小公倍数 数学性质: 如果b是A和B的公约数,那么:b也是A+B的约数,即b是A,B,A+B的公约数.b也是A-B的约数,即b是A,B,A-B的公约数.更一般地,对于任意整数x.y, ...
- 辗转相除求最大公约数,最大公倍数
上次笔试考到这个,不知道辗转相除什么意思,用短除法做的,回来查了一下才知道 辗转相除法也叫欧几里德算法,这是原理 例如,求(319,377): ∵ 377÷319=1(余58) ∴(377,319)= ...
最新文章
- Android开发之dp转像素,像素转换为dp工具类,详细代码,带有源文件下载地址。...
- 如何反转 Python 中的字符串
- vue动态生成下拉框_vue+elementui 动态创建下拉框
- shell 自动输入密码
- php软件开发--vue基础
- HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP错误解决方法
- mac下载安装adb环境
- JAVA项目一 家庭收支记账软件
- 下载百度个性地图瓦片
- Layout-pcb之天线设计
- OpenGL多重纹理使用与理解
- 【maven】maven简介
- 计算机领域区块链是什么是意思,为什么区块链瑞普顿RXP是不可篡改的
- 使用BBED恢复DELETE的数据
- SAP:调用函数显示MIGO界面
- 2020年第三方铁塔数据大汇总,全年新增超4900座
- 子墨对酒《三国杀》里论模式(伍)模板方法
- 如何优雅的配置 Java 微服务
- 嘉立创SMT贴片打板流程
- stress 压力测试工具