Skip to content

Instantly share code, notes, and snippets.

@m0r13
Last active August 29, 2015 14:09
Show Gist options
  • Select an option

  • Save m0r13/495351b1aa291b186ee2 to your computer and use it in GitHub Desktop.

Select an option

Save m0r13/495351b1aa291b186ee2 to your computer and use it in GitHub Desktop.
Primes stuff.
M_1 = [4, 8, 9, 12, 16, 18, 20, 24, 25, 27]
M_2 = [60, 66, 90, 600, 606, 609, 666, 680, 696, 806]
M_3 = [4, 6, 8, 9, 12, 16, 18, 20, 24, 25]
M_a = [4, 8, 9, 12, 16]
M_b = [6, 60, 66, 69, 86]
M_c = [6, 60, 66, 69, 86]
#!/usr/bin/env python2
primes = [2]
for p in xrange(3, 1000, 2):
prime = True
q = 3
while q*q <= p:
if p % q == 0:
prime = False
break
q += 1
if prime:
primes.append(p)
def prime_factors(x):
if x == 0:
return []
prime_factors = []
primes_i = 0
rest = x
while rest != 1:
if primes_i >= len(primes):
raise Exception("Not enough prime numbers available!")
prime = primes[primes_i]
if rest % prime == 0:
rest = rest / prime
prime_factors.append(prime)
else:
primes_i += 1
return prime_factors
def P(x):
return len(set(prime_factors(x))) == 3
def Q(x):
if x == 0:
return False
for p in primes:
if x % (p*p) == 0:
return True
if p*p >= x*x:
break
return False
def R(x):
for c in str(x):
if not c in ("0", "6", "8", "9"):
return False
return True
if __name__ == "__main__":
max_num = 1000
set_negate = lambda X: set(range(1, max_num)).difference(X)
first_elements = lambda X, n=10: sorted(list(X))[:n]
P_set, Q_set, R_set = set(), set(), set()
for x in xrange(1, max_num):
if P(x):
#print "P(%s)" % x
P_set.add(x)
if Q(x):
#print "Q(%s)" % x
Q_set.add(x)
if R(x):
#print "R(%s)" % x
R_set.add(x)
M_1 = set_negate(P_set).intersection(Q_set)
M_2 = P_set.intersection(R_set)
M_3 = set_negate(P_set).intersection(Q_set).union(R_set)
a = M_1.union(M_2)
b = M_3.intersection(set_negate(M_1))
c = M_3.difference(M_1)
print "M_1 =", first_elements(M_1)
print "M_2 =", first_elements(M_2)
print "M_3 =", first_elements(M_3)
print "M_a =", first_elements(a, 5)
print "M_b =", first_elements(b, 5)
print "M_c =", first_elements(c, 5)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment