Exemple #1
0
def findDivisors(n):
	if(n < 0):
		raise AssertionError()
	if(n == 1):
		return [1]
	if(n == 2):
		return [1,2]
	if(primemath.isPrime(n)):
		return [1,n]
		
	probPrimes = primemath.generatePrimes(etcmath.isqrt(n))
	primes = []
	for p in probPrimes:
		if(n%p==0):
			primes.append(p)
	
	primeExp = [0]*len(primes)
	for p in primes:
		while(n%p==0):
			n /= p
			primeExp[primes.index(p)] += 1
	
	primeExpC = [0]*len(primes)
	
	divisors = [1]
	while(True):
		i = 0
		while(True):
			primeExpC[i] += 1
			if(primeExpC[i] <= primeExp[i]):
				break
			primeExpC[i] = 0
			i += 1
			if(i >= len(primes)):
				return divisors
		
		d = 1
		for p in primes:
			d *= p**primeExpC[primes.index(p)]
			
		divisors.append(d)
Exemple #2
0
def findDivisors(n):
    if (n < 0):
        raise AssertionError()
    if (n == 1):
        return [1]
    if (n == 2):
        return [1, 2]
    if (primemath.isPrime(n)):
        return [1, n]

    probPrimes = primemath.generatePrimes(etcmath.isqrt(n))
    primes = []
    for p in probPrimes:
        if (n % p == 0):
            primes.append(p)

    primeExp = [0] * len(primes)
    for p in primes:
        while (n % p == 0):
            n /= p
            primeExp[primes.index(p)] += 1

    primeExpC = [0] * len(primes)

    divisors = [1]
    while (True):
        i = 0
        while (True):
            primeExpC[i] += 1
            if (primeExpC[i] <= primeExp[i]):
                break
            primeExpC[i] = 0
            i += 1
            if (i >= len(primes)):
                return divisors

        d = 1
        for p in primes:
            d *= p**primeExpC[primes.index(p)]

        divisors.append(d)
Exemple #3
0
import nfspolygen
import etcmath
import primemath
import math

if __name__ == '__main__':
	semiprimeSize = 100
	n = primemath.generateLargePrime(semiprimeSize/2)*primemath.generateLargePrime(semiprimeSize/2)	
	print "n = %s" % (n)
	
	d = 3
	(m,nfsPoly) = nfspolygen.generateNFSPoly(n,d)	
	print "Using poly %s, m = %s" % (nfsPoly,m)
	B = M = etcmath.calculateB(n)
	print "Using bound %s" % B
	prefactorBase = primemath.generatePrimes(B)
	
	K = (int)(3*math.log(n,10)) # for quadratic characters
	
	afBaseFile = open("afbase.txt", "w")
	rfBaseFile = open("rfbase.txt", "w")
	print "Generating af and rf bases..."	
	for p in prefactorBase:
		if(p > B): break
		rfBaseFile.write(str([m%p,p])+"\n")
		K += 1
		roots = poly.getRootsModPFast(nfsPoly,p)
		for root in roots:
			afBaseFile.write(str([root,p])+"\n")
			K += 1
			
Exemple #4
0
import nfspolygen
import etcmath
import primemath
import math

if __name__ == '__main__':
	semiprimeSize = 64
	n = primemath.generateLargePrime(semiprimeSize/2)*primemath.generateLargePrime(semiprimeSize/2)	
	print "n = %s" % (n)
	
	d = 3
	(m,nfsPoly) = nfspolygen.generateNFSPoly(n,d)	
	print "Using poly %s, m = %s" % (nfsPoly,m)
	B = M = etcmath.calculateB(n)
	print "Using bound %s" % B
	prefactorBase = primemath.generatePrimes(B)
	
	K = (int)(3*math.log(n,10)) # for quadratic characters
	
	afBaseFile = open("afbase.txt", "w")
	rfBaseFile = open("rfbase.txt", "w")
	print "Generating af and rf bases..."	
	for p in prefactorBase:
		if(p > B): break
		rfBaseFile.write(str([m%p,p])+"\n")
		K += 1
		roots = poly.getRootsModPFast(nfsPoly,p)
		for root in roots:
			afBaseFile.write(str([root,p])+"\n")
			K += 1