标签:
题意:给定一个数n,要求是找到一对数a、b,使得a+b=n,且a和b的最小公倍数要最大,求最大的最小公倍数。
思路:直接暴力查询,找出最大的值。具体看代码。时间复杂度是O(n),并不会超时。注意要用long long,会爆int。
1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include<iostream> 3 #include<cstdio> 4 #include<cstring> 5 #include<cmath> 6 #include<math.h> 7 #include<algorithm> 8 #include<queue> 9 #include<set> 10 #include<bitset> 11 #include<map> 12 #include<vector> 13 #include<stdlib.h> 14 using namespace std; 15 #define ll long long 16 #define eps 1e-10 17 #define MOD 1000000007 18 #define N 1000000 19 #define inf 1e12 20 ll n; 21 ll gcd(ll a,ll b){ 22 return b==0?a:gcd(b,a%b); 23 } 24 ll lcm(ll a,ll b){ 25 return a*b/gcd(a,b); 26 } 27 int main() 28 { 29 ll t; 30 scanf("%I64d",&t); 31 while(t--){ 32 scanf("%I64d",&n); 33 34 ll x=n/2; 35 ll r=gcd(x,n-x); 36 ll ans=x*(n-x)/r; 37 while(r!=1 && x>0){ 38 x--; 39 r=gcd(x,n-x); 40 ans=max(ans,x*(n-x)/r); 41 } 42 printf("%I64d\n",ans); 43 } 44 return 0; 45 }
hdu 4627 The Unsolvable Problem(暴力的搜索)
标签:
原文地址:http://www.cnblogs.com/UniqueColor/p/5158343.html