def problem231():
	n = 20000000
	c = 15000000
	total = 0
	for m in range(n,n-c,-1):
		print(m)
		total += sum(factorize(m))
	for m in range(c,1,-1):
		print(-m)
		total -= sum(factorize(m))
	return total
def problem131a():
	count = 0
	for a in range(1,10**5):
		a3 = a**3
		factorsOfa = factorize(a)
		div = divisorsFromFactors( factorsOfa + factorsOfa + factorsOfa )
		for k in div:
			n = isSquare(a3 // k)
			if n and k-n >0 and isPrime(k - n):
				print(k-n)
def problem168():
	power = 1
	for n in count(1):
		if n > 10**100:
			break
		if n >= 10**power:
			print("reached ", 10**power)
			power += 1
		if rightShift(n) % n == 0:
			if len(set(str(n))) != 1:
				print(n,factorize(rightShift(n)))
def problem303():
	numbers99 = [i for i in range(999,10000,999)]
	n = 999
	f = {}
	#print(g(2*9))
	#print(g(2*99))
	return factorize(1111222222222222222222)

	while len(numbers99) != 0:
		if isMadeOf2(n):
			numbersToRemove = []
			for k in numbers99:
				if n % k == 0:
					print(k)
					numbersToRemove.append(k)
					f[k] = n
			if len(numbersToRemove) != 0:
				print(factorize(n))
				print(gcdd(*numbers99))
			for number in numbersToRemove:
				numbers99.remove(number)
		n += 999
	print(f)
def problem131():
	seen = 0
	for m in count(2):
		factors = set(factorize(m))
		n = m**3
		for k in range(0,n,product(factors)**2):
			if any( k % p != 0 for p in factors): continue
			if k % product(factors) != 0: print(k)
			if (n**3 - k**3) % n**2 == 0 and isPrime((n**3 - k**3) // n**2):
				p = (n**3 - k**3) // n**2
				if p > 10**6:
					return seen
				print(n, p, k)
				seen += 1
def problem216():
	count = 0
	for p in iPrime():
		print(jacobi(( p + 1)//2, p))
		if p > 100: break
	return
	for index, n in enumerate(t(100)):
		index += 2
		#print( 2*(index)**2 -1 , n, isPrime(n), jacobi(( index + 1)//2, index))
		if isPrime(n):
			count += 1
			print("gave a prime ", jacobi(( n + 1)//2, n))
		else:
			for p in factorize(n):
				print("Didn't give a prime", p,jacobi(( p + 1)//2, p))
	return count