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;
}
posted @ 2020-12-31 10:28  Withinlover  阅读(66)  评论(0编辑  收藏  举报