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;
}
上一篇:foundation5的学习 网页demo


下一篇:VB.NET机房收费 & 抽象工厂模式