from Crypto.Util.number import bytes_to_long, getPrime
import random

FLAG = b'sctf{??????????????????????????}'

def getProthPrime(n):
    while True:
        k = random.randint(1, 2**63) * 2 + 1
        p = k * 2**(n - 64) + 1

        # With Proth's Theorem primality checking is so easy!
        for a in range(2, 12):
            a = random.randint(2, p-1)
            if pow(a, (p-1)//2, p) == p-1:
                return p

p, q = getProthPrime(512),getPrime(512)
n = p*q
e = 65537

m = bytes_to_long(FLAG)
c = pow(m,e,n)

print(f'{c = }')
print(f'{n = }')

'''
c = 28361548396052470805609182453578811296488064111927275091465746476913023481206572454093064113389207519785161200961426105580316368625269715000880847694207735018858472578327415301675140848904695196197416945226625424889008830734957626121902545076351519606299300324512446125784810089682943237280874040201510272479
n = 34324010910101370405032828342262192285560653918790417913883664249459443563214253251280358509933785641445643754340765454837039485364522507628461319355281493786665758401920085329566342675578405334501254462249097312016832870306009221660768717370605131175122327715605174245203892512121128761348915583787535614609
'''
