2020 算法上机赛 C1 - B Rotate
题目描述
\(H\) 老师面向北方站在一个二维平面上。现在他站在出发点,想做若干次这样的操作:向自己面向的方向走 1 米 ,然后逆时针旋转 \(X\) 度(单位是角度)。请问他最少需要做多少次这样的操作,才能重新回到出发点?
输入
多组输入数据
每组数据输入一行,一个整数 \(X\) ,含义见题目描述。
输出
每组数据输出一行,一个整数,表示最少操作次数。
输入样例
90
输出样例
4
数据范围
\(1\leq X\leq 179\)
做法
内角和肯定是 360 的整数倍,肯定也是 \(X\) 的整数倍
- 内角和的最小值是 \(lcm(360, X)\)
- 所以需要转动的圈数就是 \(lcm(360, X) / X\)
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <algorithm>
using namespace std;
typedef long long ll;
ll x;
ll gcd(ll x, ll y) {return !y?x:gcd(y,x%y);}
ll lcm(ll x, ll y) {return x * y / gcd(x, y);}
int main() {
while(cin >> x)
cout << lcm(x, 360) / x << endl;
return 0;
}