File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import sys
2+
3+ read = lambda : sys .stdin .readline ().rstrip ()
4+
5+
6+ class Problem :
7+ def __init__ (self ):
8+ self .n = int (read ())
9+
10+ def solve (self ) -> None :
11+ result , num = self .n , 2
12+ while num ** 2 <= self .n :
13+ if self .n % num == 0 :
14+ while self .n % num == 0 :
15+ self .n //= num
16+ result -= result // num
17+
18+ num += 1
19+
20+ if self .n > 1 :
21+ result -= result // self .n
22+
23+ print (result )
24+
25+
26+ if __name__ == "__main__" :
27+ Problem ().solve ()
Original file line number Diff line number Diff line change 1+ [
2+ {
3+ "input" : [
4+ " 1"
5+ ],
6+ "expected" : [
7+ " 1"
8+ ]
9+ },
10+ {
11+ "input" : [
12+ " 5"
13+ ],
14+ "expected" : [
15+ " 4"
16+ ]
17+ },
18+ {
19+ "input" : [
20+ " 10"
21+ ],
22+ "expected" : [
23+ " 4"
24+ ]
25+ },
26+ {
27+ "input" : [
28+ " 45"
29+ ],
30+ "expected" : [
31+ " 24"
32+ ]
33+ },
34+ {
35+ "input" : [
36+ " 99"
37+ ],
38+ "expected" : [
39+ " 60"
40+ ]
41+ }
42+ ]
Original file line number Diff line number Diff line change 1+ import json
2+ import os .path
3+ import unittest
4+ from io import StringIO
5+ from unittest .mock import patch
6+
7+ from parameterized import parameterized
8+
9+ from main import Problem
10+
11+
12+ def load_sample (filename : str ):
13+ path = os .path .join (os .path .dirname (os .path .abspath (__file__ )), filename )
14+
15+ with open (path , "r" ) as file :
16+ return [(case ["input" ], case ["expected" ]) for case in json .load (file )]
17+
18+
19+ class TestCase (unittest .TestCase ):
20+ @parameterized .expand (load_sample ("sample.json" ))
21+ def test_case (self , case : str , expected : list [str ]):
22+ # When
23+ with (
24+ patch ("sys.stdin.readline" , side_effect = case ),
25+ patch ("sys.stdout" , new_callable = StringIO ) as output ,
26+ ):
27+ Problem ().solve ()
28+
29+ result = output .getvalue ().rstrip ()
30+
31+ # Then
32+ self .assertEqual ("\n " .join (expected ), result )
33+
34+
35+ if __name__ == "__main__" :
36+ unittest .main ()
You can’t perform that action at this time.
0 commit comments