https://codeforces.com/problemset/problem/822/A
<C++>
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int a, b, ans = 1;
cin >> a >> b;
for (int i = 1; i <= min(a, b); i++)
ans *= i;
cout << ans << endl;
}
> 각각의 팩토리얼을 구하고 나서, gcd를 구하기 위해 따로 함수를 만들고.. 이것저것 해봤는데 잘 안되더라고요.
코드도 복잡해지고...
배점 800점 짜리 문제의 코드가 그렇게 길 것 같진 않아서 그냥 싹 갈아엎고 윗 코드로 재도전했더니 Accepted 받았습니다.
> a와 b의 최솟값(min(a,b))을 결정하여, 1부터 그 최솟값까지 곱하면 그것이 곧 답이 됩니다.
> 만약 a>b라면,
a = 1*2*3*...*b*(b+1)*....a
b = 1*2*3*...*b 입니다.
다시 말해, a와 b의 gcd(최대공약수)는 1*2*3*...b가 될 것입니다.
그러므로 1부터 min(a,b)까지의 곱이 답이 되는 것입니다.
'Problem Solving > 코드포스' 카테고리의 다른 글
[코드포스] 129A : Cookies (0) | 2020.08.07 |
---|---|
[코드포스] 1283B : Candies Division (0) | 2020.07.06 |
[코드포스] 1316A : Grade Allocation (0) | 2020.07.01 |
[코드포스] 1374A : Required Remainder (0) | 2020.06.30 |