


from __future__ import annotations

lowercase_	   =     8.988E9  # units = N * m^s * C^-2
def 				UpperCamelCase__					(  SCREAMING_SNAKE_CASE__      ,	SCREAMING_SNAKE_CASE__      ,	SCREAMING_SNAKE_CASE__      ,	SCREAMING_SNAKE_CASE__						):
	__lowerCamelCase		:							Any		 =						abs(chargea * chargea						)

	if (force, chargea, chargea, distance).count(0						) != 1:
		raise ValueError('One and only one argument must be 0'						)
	if distance < 0:
		raise ValueError('Distance cannot be negative'						)
	if force == 0:
		__lowerCamelCase		:							Optional[Any]		 =						COULOMBS_CONSTANT * charge_product / (distance**2)
		return {"force": force}
	elif chargea == 0:
		__lowerCamelCase		:							Optional[Any]		 =						abs(SCREAMING_SNAKE_CASE__						) * (distance**2) / (COULOMBS_CONSTANT * chargea)
		return {"charge1": chargea}
	elif chargea == 0:
		__lowerCamelCase		:							List[str]		 =						abs(SCREAMING_SNAKE_CASE__						) * (distance**2) / (COULOMBS_CONSTANT * chargea)
		return {"charge2": chargea}
	elif distance == 0:
		__lowerCamelCase		:							str		 =						(COULOMBS_CONSTANT * charge_product / abs(SCREAMING_SNAKE_CASE__						)) ** 0.5
		return {"distance": distance}
	raise ValueError('Exactly one argument must be 0'						)


if __name__ == "__main__":
							import doctest

							doctest.testmod()





from maths.is_square_free import is_square_free
from maths.prime_factors import prime_factors
def 				UpperCamelCase__					(  SCREAMING_SNAKE_CASE__						):
 __lowerCamelCase		:							Dict		 =						prime_factors(SCREAMING_SNAKE_CASE__						)
 if is_square_free(SCREAMING_SNAKE_CASE__						):
  return -1 if len(SCREAMING_SNAKE_CASE__						) % 2 else 1
 return 0


if __name__ == "__main__":
       import doctest

       doctest.testmod()

