Created
October 28, 2019 09:42
-
-
Save primus-lab/a6b30bfb75ddacea42c0866ab3f2553e to your computer and use it in GitHub Desktop.
Primality tests for numbers of the form N=2*6^n-1 and N=2*6^n+1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
This script was written in python 3.x. | |
In order to run this script, please make sure your python version is 3.x or above. | |
How to run: | |
python T261.py | |
or if it doesn't work use this one: | |
python3 T261.py | |
Author: Pedja Terzic <[email protected]> | |
''' | |
from mpmath import * | |
from tkinter import * | |
import tkinter.messagebox | |
from tkinter.ttk import Frame, Label, Entry, Radiobutton, Button, Style | |
mp.dps = 50000; mp.pretty = True | |
class T261(Frame): | |
def __init__(self, parent): | |
Frame.__init__(self, parent) | |
self.parent = parent | |
self.initUI() | |
def initUI(self): | |
self.parent.title("T261") | |
self.pack(fill=BOTH, expand=True) | |
global value | |
value = 0 | |
global v | |
v = IntVar() | |
v.set(1) | |
global exp | |
exp = StringVar() | |
global res | |
res = StringVar() | |
frame1 = Frame(self,style='My.TFrame') | |
frame1.pack(fill=X) | |
rb1 = Radiobutton(frame1, text = "2*6^n-1", variable = v, value = 1,style='My.TRadiobutton') | |
rb1.pack( anchor = W ) | |
rb2 = Radiobutton(frame1, text = "2*6^n+1", variable = v, value = 2,style='My.TRadiobutton') | |
rb2.pack( anchor = W ) | |
frame2 = Frame(self,style='My.TFrame') | |
frame2.pack(fill=X) | |
lbl2 = Label(frame2, text="Enter the exponent :", width=18,background='orange') | |
lbl2.pack(side=LEFT, padx=5, pady=5) | |
entry2 = Entry(frame2,textvariable=exp,style='My.TEntry') | |
entry2.pack(fill=X, padx=5, expand=True) | |
frame3 = Frame(self,style='My.TFrame') | |
frame3.pack(fill=X) | |
result = Label(frame3, textvariable=res, width=42,background='orange') | |
result.pack(side=LEFT, padx=60, pady=5) | |
frame4 = Frame(self,style='My.TFrame') | |
frame4.pack(fill=X) | |
btntest = Button(frame4, text="Test", width=10, command=self.test,style='My.TButton') | |
btntest.pack(side=LEFT, anchor=N, padx=5, pady=5) | |
btnclear = Button(frame4, text="Clear", width=10, command=self.clear,style='My.TButton') | |
btnclear.pack(side=LEFT, anchor=N, padx=5, pady=5) | |
btnclose = Button(frame4, text="Close", width=10, command=self.quit,style='My.TButton') | |
btnclose.pack(side=LEFT, anchor=N, padx=5, pady=5) | |
def errorMsg(self,msg): | |
if msg == 'error': | |
tkinter.messagebox.showerror('Error!', 'Something went wrong! Maybe invalid entries') | |
elif msg == 'erre': | |
tkinter.messagebox.showerror('Error!', 'Exponent must be greater than two') | |
def test(self): | |
try: | |
n = int(exp.get()) | |
if n<3: | |
self.errorMsg('erre') | |
else: | |
if v.get()==1: | |
N=2*6**n-1 | |
s=1770682648898 | |
ctr=1 | |
while ctr<=n-2: | |
s=(s**6-6*s**4+9*s**2-2)%N | |
ctr=ctr+1 | |
if int(s)==0: | |
value="2*6^"+str(n)+"-1 is prime" | |
res.set(self.makeAsItIs(value)) | |
else: | |
value="2*6^"+str(n)+"-1 is composite" | |
res.set(self.makeAsItIs(value)) | |
else: | |
N=2*6**n+1 | |
s=23463956348191699342 | |
ctr=1 | |
while ctr<=n-2: | |
s=(s**6-6*s**4+9*s**2-2)%N | |
ctr=ctr+1 | |
if int(s)==0: | |
value="2*6^"+str(n)+"+1 is prime" | |
res.set(self.makeAsItIs(value)) | |
else: | |
value="2*6^"+str(n)+"+1 is composite" | |
res.set(self.makeAsItIs(value)) | |
except: | |
self.errorMsg('error') | |
def clear(self): | |
try: | |
res.set('') | |
exp.set('') | |
except: | |
self.errorMsg('error') | |
def makeAsItIs(self, value): | |
return value | |
def main(): | |
root = Tk() | |
root.resizable(0,0) | |
s = Style() | |
s.configure('My.TFrame', background='orange') | |
s.configure('My.TButton', background='light gray') | |
s.configure('My.TEntry', fieldbackground='light gray') | |
s.configure('My.TRadiobutton', background='orange') | |
s.map('My.TRadiobutton', background=[('active', '#FFC133')]) | |
root.geometry("300x125") | |
t261 = T261(root) | |
root.mainloop() | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment