期末练习赛 找数 数学+模拟
2016-01-26 16:29
393 查看
题目描述 给你一个正整数 Z,请你找两个正整数 X 和 Y,使得 X+Y=Z,且 X 和 Y 的最小公倍数尽可
能大。输出 X 和 Y 的最小公倍数。
输入格式 第一行,一个整数 Z
输出格式 一行,一个整数,表示 X 和 Y 的最小公倍数。
输入样例 样例输入1: 样例输入2: 样例输入3:
4
10 23
输出样例 样例输出1: 样例输出2: 样例输出3:
3 21 132
数据范围
对于30%的数据 2<=Z<=103对于60%的数据 2<=Z<=105对于100%的数据 2<=Z<=109
易知两个互质的时候最大,证略...下次有空证
能大。输出 X 和 Y 的最小公倍数。
输入格式 第一行,一个整数 Z
输出格式 一行,一个整数,表示 X 和 Y 的最小公倍数。
输入样例 样例输入1: 样例输入2: 样例输入3:
4
10 23
输出样例 样例输出1: 样例输出2: 样例输出3:
3 21 132
数据范围
对于30%的数据 2<=Z<=103对于60%的数据 2<=Z<=105对于100%的数据 2<=Z<=109
易知两个互质的时候最大,证略...下次有空证
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; long long gcd(long long a,long long b) { if(b%a==0)return a; return gcd(b%a,a);//看清楚这个.... } int main() { long long n,i; freopen("find.in","r",stdin); freopen("find.out","w",stdout); cin>>n; long long a=n/2,b,max1=0; if(a%2==0)b=a; else b=a+1; while(a) { long long c=gcd(a,b); max1=max(max1,a*b/c); if(c==1) { cout<<max1; return 0; } a--; b++; } cout<<max1; }
相关文章推荐
- 38.Which two statements are true regarding views? (Choose two.)
- HTML语义化:HTML5新标签——template
- Visual Studio Code之常备快捷键
- Qt学习笔记(一)
- FragmentPagerAdapter API
- 介绍MySQL Jdbc驱动的rewriteBatchedStatements参数
- matlab画图,变长坐标轴
- Android 多渠道打包之混淆文件ProGuard技术详解-特别篇(打包系列教程之三)
- LinkedList转换成平衡二叉树
- c# List内存分配
- 将数据源倒置
- Python之 with and as
- 海底捞的十五天,让我重当程序员
- Windows Server 2012 磁盘管理之 简单卷、跨区卷、带区卷、镜像卷和RAID-5卷
- [leetcode] 63. Unique Paths II
- 301. Remove Invalid Parentheses
- ThinkPHP单字母函数(快捷方法)使用总结
- 20160126--字符串类
- PL/SQL Developer使用说明
- @property属性