
"""simple docstring"""




UpperCAmelCase__      :    List[str]    							= 2_5_6
# Modulus to hash a string
UpperCAmelCase__      :    str    							= 1_0_0_0_0_0_3

def lowercase_  (   _snake_case   ,_snake_case						):
							SCREAMING_SNAKE_CASE__						:       Dict           =   len(_snake_case						)
							SCREAMING_SNAKE_CASE__						:       Any           =   len(_snake_case						)
							if p_len > t_len:
														return False

							SCREAMING_SNAKE_CASE__						:       List[Any]           =   0
							SCREAMING_SNAKE_CASE__						:       Dict           =   0
							SCREAMING_SNAKE_CASE__						:       str           =   1

							# Calculating the hash of pattern and substring of text
							for i in range(_snake_case						):
														SCREAMING_SNAKE_CASE__						:       List[str]           =   (ord(pattern[i]						) + p_hash * alphabet_size) % modulus
														SCREAMING_SNAKE_CASE__						:       Tuple           =   (ord(text[i]						) + text_hash * alphabet_size) % modulus
														if i == p_len - 1:
																					continue
														SCREAMING_SNAKE_CASE__						:       int           =   (modulus_power * alphabet_size) % modulus

							for i in range(0   ,t_len - p_len + 1						):
														if text_hash == p_hash and text[i : i + p_len] == pattern:
																					return True
														if i == t_len - p_len:
																					continue
														# Calculate the https://en.wikipedia.org/wiki/Rolling_hash
														SCREAMING_SNAKE_CASE__						:       Any           =   (
														    (text_hash - ord(text[i]						) * modulus_power) * alphabet_size
														    + ord(text[i + p_len]						)
														) % modulus
							return False

def lowercase_  (   ):
							SCREAMING_SNAKE_CASE__						:       int           =   """abc1abc12"""
							SCREAMING_SNAKE_CASE__						:       List[Any]           =   """alskfjaldsabc1abc1abc12k23adsfabcabc"""
							SCREAMING_SNAKE_CASE__						:       Any           =   """alskfjaldsk23adsfabcabc"""
							assert rabin_karp(_snake_case   ,_snake_case						) and not rabin_karp(_snake_case   ,_snake_case						)

							# Test 2)
							SCREAMING_SNAKE_CASE__						:       List[Any]           =   """ABABX"""
							SCREAMING_SNAKE_CASE__						:       Optional[int]           =   """ABABZABABYABABX"""
							assert rabin_karp(_snake_case   ,_snake_case						)

							# Test 3)
							SCREAMING_SNAKE_CASE__						:       Any           =   """AAAB"""
							SCREAMING_SNAKE_CASE__						:       int           =   """ABAAAAAB"""
							assert rabin_karp(_snake_case   ,_snake_case						)

							# Test 4)
							SCREAMING_SNAKE_CASE__						:       str           =   """abcdabcy"""
							SCREAMING_SNAKE_CASE__						:       int           =   """abcxabcdabxabcdabcdabcy"""
							assert rabin_karp(_snake_case   ,_snake_case						)

							# Test 5)
							SCREAMING_SNAKE_CASE__						:       int           =   """Lü"""
							SCREAMING_SNAKE_CASE__						:       str           =   """Lüsai"""
							assert rabin_karp(_snake_case   ,_snake_case						)
							SCREAMING_SNAKE_CASE__						:       Any           =   """Lue"""
							assert not rabin_karp(_snake_case   ,_snake_case						)
							print("""Success."""						)


if __name__ == "__main__":
					test_rabin_karp()






"""simple docstring"""




import math
import unittest

def lowercase_  (   _snake_case						):
							assert isinstance(_snake_case   ,_snake_case						) and (
							    number >= 0
							), "'number' must been an int and positive"

							if 1 < number < 4:
														# 2 and 3 are primes
														return True
							elif number < 2 or number % 2 == 0 or number % 3 == 0:
														# Negatives, 0, 1, all even numbers, all multiples of 3 are not primes
														return False

							# All primes number are in format of 6k +/- 1
							for i in range(5   ,int(math.sqrt(_snake_case						) + 1						)   ,6						):
														if number % i == 0 or number % (i + 2) == 0:
																					return False
							return True



class 	lowerCAmelCase_						(unittest.TestCase  ):


				"""simple docstring"""



				def 	__magic_name__    (self    )					->		Dict:



											"""simple docstring"""




											self.assertTrue(is_prime(2    )    )
											self.assertTrue(is_prime(3    )    )
											self.assertTrue(is_prime(5    )    )
											self.assertTrue(is_prime(7    )    )
											self.assertTrue(is_prime(11    )    )
											self.assertTrue(is_prime(13    )    )
											self.assertTrue(is_prime(17    )    )
											self.assertTrue(is_prime(19    )    )
											self.assertTrue(is_prime(23    )    )
											self.assertTrue(is_prime(29    )    )



				def 	__magic_name__    (self    )					->		List[Any]:



											"""simple docstring"""




											with self.assertRaises(SCREAMING_SNAKE_CASE__    ):
																		is_prime(-19    )
											self.assertFalse(
											    is_prime(0    )   ,       """Zero doesn't have any positive factors, primes must have exactly two."""   ,       )
											self.assertFalse(
											    is_prime(1    )   ,       """One only has 1 positive factor, primes must have exactly two."""   ,       )
											self.assertFalse(is_prime(2 * 2    )    )
											self.assertFalse(is_prime(2 * 3    )    )
											self.assertFalse(is_prime(3 * 3    )    )
											self.assertFalse(is_prime(3 * 5    )    )
											self.assertFalse(is_prime(3 * 5 * 7    )    )


if __name__ == "__main__":
					unittest.main()




