链接:
The Unsolvable Problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 243 Accepted Submission(s): 143
Problem Description
There are many unsolvable problem in the world.It could be about one or about zero.But this time it is about bigger number.
Given an integer n(2 <= n <= 10 9).We should find a pair of positive integer a, b so that a + b = n and [a, b] is as large as possible. [a, b] denote the least common multiplier of a, b.
Given an integer n(2 <= n <= 10 9).We should find a pair of positive integer a, b so that a + b = n and [a, b] is as large as possible. [a, b] denote the least common multiplier of a, b.
Input
The first line contains integer T(1<= T<= 10000),denote the number of the test cases.
For each test cases,the first line contains an integer n.
For each test cases,the first line contains an integer n.
Output
For each test cases,
print the maximum [a,b] in a line.
Sample Input
3 2 3 4
Sample Output
1 2 3
Source
题意:
找最大的最小公倍数
给你一个数 N , a+b = N ,找最大的 lcm(a,b)
思路:
奇数的随便就看出来了,取一半就好了
偶数的,写个暴力程序,打下表也可以随便看出规律,取一半了
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
__int64 gcd(__int64 a, __int64 b)
{
return b == 0 ? a : gcd(b,a%b);
}
__int64 lcm(__int64 a, __int64 b){
return a/gcd(a,b)*b;
}
int main()
{
int T;
__int64 n;
scanf("%d", &T);
while(T--)
{
scanf("%I64d", &n);
__int64 a,b;
__int64 ans = 0,tmp1,tmp2;
if(n&1) ans = lcm(n/2,n/2+1);
else
{
if(n == 2) ans = 1;
else
{
__int64 c = n/2-1;
tmp1 = lcm(c,n-c);
tmp2 = lcm(c-1,(n-c+1));
ans = max(tmp1,tmp2);
}
}
printf("%I64d\n", ans);
}
return 0;
}

本文介绍了一道关于寻找两个正整数的最大最小公倍数(LCM)的问题,给定一个整数N,需要找到两个正整数a和b使得a+b=N,并且[a,b]尽可能大,[a,b]表示a和b的最小公倍数。文章提供了详细的解题思路及C++实现代码。
1777

被折叠的 条评论
为什么被折叠?



