Polygon for the Angle (Codeforces 1096C)
Tags: Others, geometry

You are given an angle $$$\text{ang}$$$. The Jury asks You to find such regular $$$n$$$-gon (regular polygon with $$$n$$$ vertices) that it has three vertices $$$a$$$, $$$b$$$ and $$$c$$$ (they can be non-consecutive) with $$$\angle{abc} = \text{ang}$$$ or report that there is no such $$$n$$$-gon.  If there are several answers, print the minimal one. It is guarantied that if answer exists then it doesn't exceed $$$998244353$$$.

Input: The first line contains single integer $$$T$$$ ($$$1 \le T \le 180$$$) — the number of queries. Each of the next $$$T$$$ lines contains one integer $$$\text{ang}$$$ ($$$1 \le \text{ang} < 180$$$) — the angle measured in degrees. 

Output: For each query print single integer $$$n$$$ ($$$3 \le n \le 998244353$$$) — minimal possible number of vertices in the regular $$$n$$$-gon or $$$-1$$$ if there is no such $$$n$$$.

Note: The answer for the first query is on the picture above.The answer for the second query is reached on a regular $$$18$$$-gon. For example, $$$\angle{v_2 v_1 v_6} = 50^{\circ}$$$.The example angle for the third query is $$$\angle{v_{11} v_{10} v_{12}} = 2^{\circ}$$$.In the fourth query, minimal possible $$$n$$$ is $$$180$$$ (not $$$90$$$).

Sample Inputs:
4
54
50
2
178

Sample Outputs:
10
18
90
180

Solution (Python):
t = int(input())
import math
for i in range(t):
    a = int(input())
    q = math.gcd(180, a)
    n = a // q
    m = 180 // q
    if n + 1 == m:
        m *= 2
    print(m)

Solution (Python):
import math
t = int(input())
for _ in range(t):
    n = int(input())
    for i in range(1, 361):
        ans = 180 * i / n
        if math.floor(ans) == ans:
            small = (180 - (ans - 2) / ans * 180) / 2
            if small * (ans - 2) < n:
                continue
            print(int(ans))
            break

Solution (Python):
import math
t = int(input())
for _ in range(t):
    n = int(input())
    for i in range(1, 361):
        ans = 180 * i / n
        if math.floor(ans) == ans:
            small = (180 - (ans - 2) / ans * 180) / 2
            if small * (ans - 2) < n:
                continue
            print(int(ans))
            break