



'''simple docstring'''

from graphs.minimum_spanning_tree_kruskal import kruskal



def 	__lowerCamelCase	( )     -> Union[str, Any]:
		_a	: Any								=				9
		_a	: List[str]								=				[
		    [0, 1, 4],
		    [0, 7, 8],
		    [1, 2, 8],
		    [7, 8, 7],
		    [7, 6, 1],
		    [2, 8, 2],
		    [8, 6, 6],
		    [2, 3, 7],
		    [2, 5, 4],
		    [6, 5, 2],
		    [3, 5, 14],
		    [3, 4, 9],
		    [5, 4, 10],
		    [1, 7, 11],
		]

		_a	: Tuple								=				kruskal(lowerCAmelCase_		,     lowerCAmelCase_    )

		_a	: Optional[Any]								=				[
		    [7, 6, 1],
		    [2, 8, 2],
		    [6, 5, 2],
		    [0, 1, 4],
		    [2, 5, 4],
		    [2, 3, 7],
		    [0, 7, 8],
		    [3, 4, 9],
		]

		assert sorted(lowerCAmelCase_    ) == sorted(lowerCAmelCase_    )









'''simple docstring'''

def 	__lowerCamelCase	( lowerCAmelCase_ = 1000000    )     -> int:
		_a	: Optional[int]								=				set(range(3		,     lowerCAmelCase_		,     2    )    )
		primes.add(2    )
		for p in range(3		,     lowerCAmelCase_		,     2    ):
				if p not in primes:
						continue
				primes.difference_update(set(range(p * p		,     lowerCAmelCase_		,     lowerCAmelCase_    )    )    )

		_a	: Tuple								=				[float(lowerCAmelCase_    ) for n in range(limit + 1    )]

		for p in primes:
				for n in range(lowerCAmelCase_		,     limit + 1		,     lowerCAmelCase_    ):
						phi[n] *= 1 - 1 / p

		return int(sum(phi[2:]    )    )


if __name__ == "__main__":
							print(f"""{solution() = }""")




