Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sympy
- import os
- p = []
- m = []
- c = []
- M = sympy.sqrt(2**32)
- i = 3
- while i < M:
- if (sympy.isprime(i)):
- p.append(i)
- i += 2
- f = open("prime.c", "w")
- f.write("int main() {}\n")
- for i in range(len(p)):
- f.write("unsigned d" + str(p[i]) + "(unsigned a) {return !(a % " +
- str(p[i]) + ");}\n")
- f.close()
- os.system("gcc -S -masm=intel -O3 -oprime.s prime.c")
- f = open("prime.s", "r")
- s = f.read()
- f.close()
- def h(d):
- d = int(d)
- if d < 0:
- return str(hex(d + (1 << 32)))
- else:
- return str(hex(d))
- def g(s):
- for i in range(len(s)):
- if s[i] == '-':
- s = s[i:]
- break;
- if s[i].isdigit():
- s = s[i:]
- break;
- d = ""
- i = 0
- while i < len(s):
- if s[i] == '-' or s[i].isdigit():
- d += s[i]
- else:
- break
- i += 1
- return h(d), s[i:]
- for i in range(len(p)):
- s = s[s.find("d" + str(p[i]) + ":"):]
- s = s[s.find("imul"):]
- n, s = g(s)
- m.append(n)
- n, s = g(s)
- c.append(n)
- f = open("prime.c", "w")
- f.write("unsigned prime(unsigned r1) {\n\tunsigned r4 = 0;\n" +
- "\tif (r1 < 2) goto F;\n\tif (r1 == 2) goto T;\n\tif (!(r1 & 1)) goto F;\n" +
- "\tif (r1 < 9) goto T;\n")
- l = 9
- for i in range(len(p)):
- if p[i] > l:
- l = p[i] * p[i]
- f.write("\tif (r1 < " + str(l) + ") goto T;\n")
- f.write("\tif (r1 * " + m[i] + " <= " + c[i] + ") goto F;\n")
- f.write("T:\n\tr4 = !r4;\nF:\n\treturn r4;\n}\n")
- f.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement