'begin the teaprime.tea program written in the
'programming language Teapro utilizing the OpenTea technology
'In today's world, we need computer software that actually works.
vari dg_pass1, dg_pass2, dg_pass3, dg_pass4
vari sg_pass1, sg_pass2, sg_pass3, sg_pass4
vari dg_now, sg_now, dg_endprogram
vari dg_length, sg_primequads, sg_fileout
vari sg_build, sg_math, sg_nothing
vari dg_xvalue, dg_yvalue, dg_zvalue, sg_xyzmath
sub_main
endp
subr sub_main
'updated 2005/10/21, 2004/03/30
'main subroutine
vari d_any, s_any, d_dot, s_dot
vari d_pick
dg_endprogram = 2
dwhi dg_endprogram <> 1
sub_menu0
endw
ends sub_main
subr sub_menu0
'updated 2008/02/25, 2008/02/05
'2007/12/05, 2007/09/22, 2007/07/24, 2007/07/20, 2007/07/18
'2007/07/17, 2007/07/16, 2007/06/27, 2007/06/26, 2007/04/24
'2007/02/26, 2007/02/25, 2007/02/24, 2007/01/06, 2006/11/26
'2006/11/11, 2006/11/05, 2006/10/29, 2006/10/25, 2006/08/29
'2006/08/17, 2006/04/08, 2005/10/21, 2005/10/19, 2004/04/17
'menu of possibilities
vari d_any, s_any, d_dot, s_dot, s_aster
vari s_pick, d_pick, s_out, d_inp, d_seconds
$trb sg_nothing, " "
$ch$ s_aster, "*", 70
sg_build = "Program: teaprime.tea, build=594, 2008/11/23"
$out sg_build
$out "Copyright (c) 1998-2008 D La Pierre Ballard"
$out "Written in the Teapro programming language"
$out "by D La Pierre Ballard"
$out "teaprime.tea may be used for free by anyone,"
$out "but there is no warranty of any kind on it."
$out s_aster
$out "Teapro uses the OpenTea technology to be simple and solid."
$out s_aster
s_any = "In today's world, we need computer software "
$app s_any, " that actually works."
$out s_any
$out s_aster
sub_floating_point_test
sub_filename
sub_path_prog_memory
sub_speedquick
$out s_aster
$out "1 = teaquad 5TP39 begin again, 1quad"
$out "3 = teaquad 5TP39 choose file code and number"
$out "11 = sub_menu_5tp39"
$out "12 = sub_menu_pnq30"
$out "13 = sub_menu_primes"
$out "21 = sub_teaquad_primes_1101"
$out "31 = sub_prime_numbers"
$out "32 = sub_compare_dfac_and_dfak"
$out "33 = sub_teaquad_prime_quads"
$out "35 = sub_teaquad_5tp39_teapro_loop"
$out "42 = sub_prime_test_one_number"
$out "44 = sub_teaquad_primes_find"
$out "45 = sub_teaquad_primes_test_one_number"
$out "46 = sub_teaquad_primes_test_in_file"
$out "47 = sub_teaquad_5tp39_test_a_number"
$out "49 = sub_teaquad_mod_test"
$out "51 = sub_collect_5tp39xx"
$out "96 = sub_xyz_math"
$out "97 = sub_teaquad_prime_speed_test"
$out "98 = sub_speed98_test"
$out "99 = sub_speed_test " + dg_pass1
s_out = "pick a number *=end " + " x=" + dg_xvalue
$inp s_pick, s_out
$isd d_any, s_pick
d_pick = 0
dift d_any = 1: $tod d_pick, s_pick
$ift s_pick = "*": dg_endprogram = 1
'5tp39 find by modulus begin again 1quad
dift d_pick = 1
dg_pass1 = 1
sub_teaquad_5tp39_by_modulus
endi
'5tp39 find by modulus choose file code, beg, end
dift d_pick = 3
dg_pass1 = 2
sub_teaquad_5tp39_by_modulus
endi
'menu for 5TP39
dift d_pick = 11: sub_menu_5tp39
'menu for PNQ30
dift d_pick = 12: sub_menu_pnq30
'sub_menu_primes
dift d_pick = 13: sub_menu_primes
'primes of the form of 101
dift d_pick = 21: sub_teaquad_primes_1101
'Primes
dift d_pick = 31: sub_prime_numbers
'almost primes
dift d_pick = 32: sub_compare_dfac_and_dfak
'Prime number quads
dift d_pick = 33: sub_teaquad_prime_quads
'test 5tp39 with teapro loop
dift d_pick = 35: sub_teaquad_5tp39_teapro_loop
'prime number, test a particular number
dift d_pick = 42: sub_prime_test_one_number
'teaquad primes > 2^53
dift d_pick = 44: sub_teaquad_primes_find
dift d_pick = 45: sub_teaquad_primes_test_one_number
dift d_pick = 46: sub_teaquad_primes_test_in_file
dift d_pick = 47: sub_teaquad_5tp39_test_a_number
dift d_pick = 49: sub_teaquad_mod_test
dift d_pick =51: sub_collect_5tp39xx
dift d_pick = 96
sg_pass1 = "x=x"
sub_xyz_math
endi
dift d_pick = 97: sub_teaquad_prime_speed_test
dift d_pick = 98: sub_speed98_test
dift d_pick = 99: sub_speed_test
sg_pass1 = s_pick
sub_xyz_math
ends sub_menu0
subr sub_menu_5tp39
'updated 2008/04/07, 2007/08/30, 2007/07/31
'2007/07/06, 2007/06/13, 2007/04/06, 2007/03/19, 2007/02/25
'2006/10/26, 2006/09/23, 2006/09/04, 2005/10/21, 2004/05/06
'menu of possibilities
vari d_any, s_any, d_dot, s_dot
vari s_pick, d_pick, s_out, d_inp, d_seconds
$out "3 = sub_5tp39_find_simple_slow"
$out "12 = sub_5TP39_validate_in_a_file"
$out "13 = sub_5tp39_two_files_compare"
$out "21 = sub_5tp39_clusters"
$out "31 = sub_getgaps_begin_again"
$out "41 = sub_teaquad_5tp39_find_simple_slow"
$out "42 = sub_teaquad_5tp39_analyze_an_a_file"
$out "52 = sub_5tp39_rolling_test_primes"
$out "62 = sub_test_primes31_to_teaquad"
$out "63 = sub_file_primes31_to_teaquad"
s_out = "enter number,*=end, x=" + dg_xvalue
$inp s_pick, s_out
$isd d_any, s_pick
d_pick = 0
dift d_any = 1: $tod d_pick, s_pick
$ift s_pick = "*": dg_endprogram = 1
'5tp39 find simple
dift d_pick = 3: sub_5tp39_find_simple_slow
'test 5TP39 primes marked 5TP39= in a file
dift d_pick = 12: sub_5TP39_validate_in_a_file
'compare two files for 5TP39
dift d_pick = 13: sub_5tp39_two_files_compare
'5TP39 clusters from the file
dift d_pick = 21: sub_5tp39_clusters
dift d_pick = 31: sub_getgaps_begin_again
dift d_pick = 41: sub_teaquad_5tp39_find_simple_slow
dift d_pick = 42: sub_teaquad_5tp39_analyze_an_a_file
dift d_pick = 52: sub_5tp39_rolling_test_primes
dift d_pick = 62: sub_test_primes31_to_teaquad
dift d_pick = 63: sub_file_primes31_to_teaquad
sg_pass1 = s_pick
sub_xyz_math
ends sub_menu_5tp39
subr sub_menu_pnq30
'updated 2005/10/22, 2004/01/01
'menu of possibilities
vari d_any, s_any, d_dot, s_dot
vari s_pick, d_pick, s_out, d_inp, d_seconds
$out "34 = big PNQ30s"
$out "35 = PNQ30 by jumping 210"
$out "36 = PNQ30 by PIVCOM"
$out "37 = PNQ30 by Modulus, begin anywhere"
$out "38 = PNQ30 by Modulus, begin again"
$out "41 = test a number for PNQ30"
$out "51 = test PNQ30s marked 'PNQ30=' or 'PNQ30:' in a file"
s_out = "enter number,*=end, x=" + dg_xvalue
$inp s_pick, s_out
$isd d_any, s_pick
d_pick = 0
dift d_any = 1: $tod d_pick, s_pick
$ift s_pick = "*": dg_endprogram = 1
'big prime quads thirty apart
dift d_pick = 34: sub_big_pnq30s
'find PNQ30 by jumping 210
dift d_pick = 35: sub_pnq30_by_210
'find PNQ30 by PIVCOM
dift d_pick = 36: sub_pnq30_by_pivcom
'find PNQ30 by modulus
dift d_pick = 37
dg_pass1 = 1
sub_pnq30_by_modulus
endi
'find PNQ30 by modulus begin anywhere
dift d_pick = 38
dg_pass1 = 2
sub_pnq30_by_modulus
endi
'test a prime number for PNQ30
dift d_pick = 41: sub_test_for_pnq30
'test PNQ30 primes marked PNQ30= in a file
dift d_pick = 51: sub_pnq30_file_test
sg_pass1 = s_pick
sub_xyz_math
ends sub_menu_pnq30
subr sub_menu_primes
'updated 2007/08/07, 2007/05/28, 2007/02/25, 2006/09/04
'2006/04/16, 2005/10/21, 2005/10/15, 2005/10/12, 2005/08/23
'2005/07/21, 2005/07/02, 2005/06/15, 2005/06/07, 2005/06/05
'2005/05/17, 2005/05/06, 2005/05/02, 2005/05/01, 2005/03/31
'2005/03/29, 2005/03/16, 2005/03/13, 2005/02/24, 2005/02/15
'2005/02/13, 2005/02/12, 2005/02/09, 2004/11/14
vari s_any, d_any, s_dot, d_dot
vari d_loop, s_pick, d_pick
d_loop = 1
dwhi d_loop = 1
$out "2. prime numbers"
$out "4. prime gaps simple"
$out "5. prime gaps dfac"
$out "51. sub_dfac_speed_test"
$out "61. test every 10^14 number for times"
$inp s_pick, "pick a number, * to end"
d_pick = 0
$isd d_any, s_pick
dift d_any = 1: $tod d_pick, s_pick
'asterisk is char 42
$ift s_pick = "*": d_loop = 2
'prime numbers
dift d_pick = 2: sub_primes_find
'prime gaps simple
dift d_pick = 4: sub_prime_gaps_simple
'prime gaps simple
dift d_pick = 5: sub_prime_gaps_dfac
'dfac speed test
dift d_pick = 51: sub_dfac_speed_test
'test every 10^14th number for times
dift d_pick = 61: sub_primes_time_test
endw
ends sub_menu_primes
subr sub_primes_find
'updated 2006/07/29, 2005/03/31, 2005/02/17,
'2005/02/13, 2005/02/12, 2005/02/11, 2005/02/09,
'2005/02/05, 2005/01/31, 2005/01/30, 2004/12/04
'prime numbers
vari s_any, d_any, s_dot, d_dot, s_out
vari d_yesfile, s_filename, d_begin, d_tofindct,d_count
vari d_time1, d_time2, d_time3
vari d_maxdiff, d_maxprime, d_prevprime
vari d_totprimes, d_yesdfac
$sys s_any, 2
$out s_any
d_yesdfac = 2
$inp s_any, "1 = use dfac"
$ift s_any = "1": d_yesdfac = 1
$inp s_any, "1 = save in file"
d_yesfile = 2
$isd d_any, s_any
dift d_any = 1: $tod d_yesfile, s_any
dift d_yesfile = 1
$inp s_filename, "enter filename"
fdel d_any, s_filename
endi
$out "12345678901234567890"
$inp s_any, "enter number to start with"
d_begin = 1
$isd d_any, s_any
dift d_any = 1: $tod d_begin, s_any
ded$ s_any, d_begin, 0, 0
$out "number entered=" + s_any
'make sure number is odd and an integer
d_begin = d_begin \ 1
d_any = d_begin % 2
dift d_any = 0: d_begin = d_begin + 1
ded$ s_any, d_begin, 0, 0
$out "begin=" + s_any
'test d_begin for primeness
d_begin = d_begin - 2
$inp s_any, "how many to find"
d_tofindct = 10
$isd d_any, s_any
dift d_any = 1: $tod d_tofindct, s_any
$out "number to find=" + d_tofindct
'get the begin seconds in d_time1
dsec d_time1
d_time2 = d_time1
'd_maxdiff is for max difference at prime d_maxprime
d_maxdiff = 0
d_maxprime = 0
'd_prevprime is for previous prime
d_prevprime = d_begin
'd_totprimes is for totalling the primes
d_totprimes = 0
'd_count is for counting the primes
d_count = 0
'is count d_count still less than total wanted d_tofindct
dwhi d_count < d_tofindct
'test d_begin for primeness
d_begin = d_begin + 2
$sho d_begin
dift d_yesdfac = 1
dfac d_dot, d_begin
else
'prime test, dg_pass1=1 means prime
dg_pass1 = d_begin
sub_prime_test_simple
d_dot = dg_pass1
endi
dift d_dot = 1
'we have a prime
'output of prime in d_begin and info
'increment count d_count
d_count = d_count + 1
'get seconds into d_time2, begin in d_time1
dsec d_any
d_time3 = d_any - d_time2
d_time2 = d_any
'find difference with previous in d_prevprime
d_any = d_begin - d_prevprime
dift d_any > d_maxdiff
dift d_prevprime > 0
d_maxdiff = d_any
d_maxprime = d_prevprime
endi
endi
ded$ s_any, d_begin, 0, 0
s_out = "count=" + d_count + ", prime=" + s_any
$app s_out, ", seconds=" + d_time3
$app s_out, ", diff=" + d_any
$out s_out
'do we save to file s_filename
dift d_yesfile = 1
fapp d_any, s_filename, s_out
dbad d_any = 0
endi
'save to d_time1 for previous prime
d_prevprime = d_begin
'd_totprimes is for totalling the primes
d_totprimes = d_totprimes + d_begin
endi
endw
'begin seconds are in d_time1
dsec d_any
d_any = d_any - d_time1
s_out = "seconds=" + d_any
$out s_out
'do we save to file s_filename
dift d_yesfile = 1
fapp d_any, s_filename, s_out
dbad d_any = 0
endi
'output maximum d_maxdiff at d_maxprime
ded$ s_any, d_maxprime, 0, 0
s_out = "max=" + d_maxdiff + ", at=" + s_any
$out s_out
'do we save to file s_filename
dift d_yesfile = 1
fapp d_any, s_filename, s_out
dbad d_any = 0
endi
ded$ s_any, d_totprimes, 0, 0
s_out = "total of primes=" + s_any
$out s_out
'do we save to file s_filename
dift d_yesfile = 1
fapp d_any, s_filename, s_out
dbad d_any = 0
endi
$inp s_any, "done"
ends sub_primes_find
subr sub_prime_gaps_simple
'updated 2006/05/20, 2006/05/09, 2006/05/03, 2006/05/01, 2006/04/18
'2006/04/17, 2006/04/16, 2005/03/31, 2005/02/23, 2005/02/19
vari s_any, d_any, s_dot, d_dot, s_out
vari d_yesfile, s_filename, d_number, d_tofindct, d_count
vari s_date, s_prevhour, d_prevhour, d_factor, d_yesdfac
vari d_gap, d_maxgap, d_prevprime, d_pause, d_loop
vari d_process, d_seconds1, d_seconds2, s_seconds
$sys s_any, 2
$out s_any
d_process = 1
dift d_process = 1
$inp s_any, "1 = pause after each"
$ift s_any = "*": dinc d_process
d_pause = 2
$isd d_any, s_any
dift d_any = 1: $tod d_pause, s_any
endi
dift d_process = 1
$out "12345678901234567890"
$inp s_any, "enter number to start with"
$ift s_any = "*": dinc d_process
d_number = 3
$isd d_any, s_any
dift d_any = 1: $tod d_number, s_any
endi
dift d_process = 1
$inp s_any, "enter max gap so far"
$ift s_any = "*": dinc d_process
d_maxgap = 2
$isd d_any, s_any
dift d_any = 1: $tod d_maxgap, s_any
endi
dift d_process = 1
ded$ s_any, d_number, 0, 0
$out "number entered=" + s_any
$out "begin gap=" + d_maxgap
'make sure number is odd and an integer
d_number = d_number \ 1
d_any = d_number % 2
dift d_any = 0: d_number = d_number + 1
s_prevhour = "99"
ded$ s_any, d_number, 0, 0
$out "begin=" + s_any
$out "gap=" + d_maxgap
$out "d_yesdfac=" + d_yesdfac
'd_prevprime is for previous prime
d_prevprime = d_number
d_number = d_number + 2
endi
'd_count is for counting the primes
d_count = 0
'is count d_count still less than total wanted d_tofindct
dsec d_seconds1
d_loop = d_process
dwhi d_loop = 1
dg_pass1 = d_number
sub_prime_test_simple
d_factor = dg_pass1
dift d_factor = 1
'd_number is prime
$sho d_number
'increment count d_count
d_count = d_count + 1
'find difference with previous in d_prevprime
d_gap = d_number - d_prevprime
dift d_gap >= d_maxgap
dsec d_seconds2
d_any = d_seconds2 - d_seconds1
dto$ s_seconds, d_any, 0, 3
d_maxgap = d_gap
ded$ s_any, d_prevprime, 0, 0
s_out = d_count + ". prime=" + s_any
$app s_out, ", gap=" + d_gap
$app s_out, ", max=" + d_maxgap
$app s_out, ", sec=" + s_seconds
$out s_out
dift d_pause = 1
$inp s_any, "return, go=go, * to end"
$ift s_any = "*": d_loop = 2
$tup s_any, s_any
$ift s_any = "GO": dinc d_pause
endi
d_seconds1 = d_seconds2
endi
'save to d_time1 for previous prime
d_prevprime = d_number
endi
'next number to test
d_number = d_number + 2
endw
ends sub_prime_gaps_simple
subr sub_prime_gaps_dfac
'updated 2008/09/13, 2006/05/20, 2006/04/19, 2006/04/18
'2006/04/17, 2006/04/16, 2005/03/31, 2005/02/23, 2005/02/19
vari s_any, d_any, s_dot, d_dot, s_out
vari d_yesfile, s_filename1, s_filename2
vari d_number, d_prevprime, d_factor
vari s_date, s_prevhour, d_prevhourprime
vari d_gap, d_maxgap, d_loop
vari d_process, d_halfmax, d_big
vari d_sec1, d_sec2, d_sec3
$sys s_any, 2
$out s_any
d_big = 2
d_process = 1
dift d_process = 1
$inp s_any, "1 = append to files GAPS1.TXT,GAPS2.TXT"
$ift s_any = "*": dinc d_process
d_yesfile = 2
$isd d_any, s_any
dift d_any = 1: $tod d_yesfile, s_any
s_filename1 = "gaps1.txt"
s_filename2 = "gaps2.txt"
endi
dift d_process = 1
'1,693,182,318,746,371 PRIME GAP AFTER THIS OF 1132
'FOUND 1999 BY Be Nyman
$out "first prime gap over 1000 found 1999 by Be Nyman"
$out "big=1,693,182,318,746,371"
$out "12345678901234567890"
$inp s_any, "enter number to start with"
$ift s_any = "*": dinc d_process
$tup s_any, s_any
$ift s_any = "BIG"
s_any = "1,693,182,318,746,371"
d_big = 1
endi
d_number = 3
$isd d_any, s_any
dift d_any = 1: $tod d_number, s_any
endi
dift d_process = 1
dift d_big <> 1
$inp s_any, "enter max gap so far"
else
s_any = "2"
endi
$ift s_any = "*": dinc d_process
d_maxgap = 2
$isd d_any, s_any
dift d_any = 1: $tod d_maxgap, s_any
endi
dift d_process = 1
ded$ s_any, d_number, 0, 0
$out "number entered=" + s_any
$out "begin gap=" + d_maxgap
'make sure number is odd and an integer
d_number = d_number \ 1
d_any = d_number % 2
dift d_any = 0: d_number = d_number + 1
s_prevhour = "99"
ded$ s_any, d_number, 0, 0
$out "begin=" + s_any
$out "gap=" + d_maxgap
d_halfmax = d_maxgap \ 2
'd_prevprime is for previous prime
d_prevprime = d_number
endi
dsec d_sec1
d_loop = d_process
dwhi d_loop = 1
'next number to test
d_number = d_number + 2
dfac d_factor, d_number
dwhi d_factor <> 1
'next number to test
d_number = d_number + 2
dfac d_factor, d_number
endw
'd_number is prime
'find difference with previous in d_prevprime
d_gap = d_number - d_prevprime
dift d_gap >= d_maxgap
dsec d_sec2
d_sec3 = d_sec2 - d_sec1
d_sec1 = d_sec2
$dat s_date
$cut s_date, s_date, 1, 20
d_maxgap = d_gap
d_halfmax = d_maxgap \ 2
ded$ s_any, d_prevprime, 0, 0
s_out = "prime=" + s_any
$app s_out, " gap=" + d_gap
$app s_out, " max=" + d_maxgap
$app s_out, " dat=" + s_date
$app s_out, " sec=" + d_sec3
$out s_out
'do we save to file s_filename
dift d_yesfile = 1
fapp d_any, s_filename1, s_out
dbad d_any = 0
fapp d_any, s_filename2, s_out
dbad d_any = 0
endi
endi
d_prevprime = d_number
dift d_gap > d_halfmax
$sho d_number
'12345678901234567890
'23-FEB-2005 08:25:03
$dat s_date
$cut s_any, s_date, 13, 2
$ift s_any <> s_prevhour
s_prevhour = s_any
$cut s_date, s_date, 1, 20
d_dot = d_prevprime - d_prevhourprime
ded$ s_dot, d_dot, 0, 0
d_prevhourprime = d_prevprime
ded$ s_any, d_prevprime, 0, 0
s_out = s_any + " " + "max=" + d_maxgap
$app s_out, " " + s_date + " " + s_dot
$out s_out
'do we save to file s_filename
dift d_yesfile = 1
fapp d_any, s_filename1, s_out
dbad d_any = 0
endi
endi
endi
dift d_big = 1
dinc d_loop
$inp s_any, "done"
endi
endw
ends sub_prime_gaps_dfac
subr sub_teaquad_5tp39_find_simple_slow
'updated 2006/11/12, 2006/10/29, 2006/10/27
'2006/10/26, 2006/09/04, 2005/03/31, 2005/02/25, 2005/02/18
'2005/02/17, 2005/02/10, 2005/02/09, 2004/11/29
'find 5tp39 with teaquad slow method
vari d_any, s_any, d_dot, s_dot, s_out
vari d_loop, s_number, d_process
vari d_numteaquad, d_teaquadpart, d_teaquadmult
vari d_mod1, d_mod2
vari d_try, d_result, s_filename
vari s_hour, s_dateline, d_beghour
$sys s_any, 2
$out s_any
d_teaquadmult = 1
dpow d_numteaquad, 10, 15
d_process = 1
dift d_process = 1
$out "enter starting number"
$inp s_number, "12345678901234567890123"
$ift s_number = "*": d_process = 2
endi
dift d_process = 1
sg_pass1 = s_number
sub_teaquad_from_string
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
dift d_teaquadpart = 0: dinc d_process
endi
dift d_process = 1
$inp s_filename, "enter output filename"
$ift s_filename = "*": d_loop = 2
endi
dift d_process = 1
'get a proper PIVCOM
'PIVCOM named by Roger Hargrave in 2002
'd_any = d_number \ 210 * 210
'dift d_any < 210: d_any = d_any + 210
'd_numteaquad % 210 = 180
d_mod1 = d_teaquadpart % 210
d_mod2 = d_numteaquad % 210 * d_teaquadmult
d_dot = d_mod1 + d_mod2 % 210
d_teaquadpart = d_teaquadpart - d_dot
'get to the first possible of a 5tp39
d_teaquadpart = d_teaquadpart - 19
dg_pass1 = d_teaquadpart
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_number = sg_pass1
$out "begin=" + s_number
s_hour = "aa"
d_beghour = d_teaquadpart
endi
d_loop = d_process
dwhi d_loop = 1
'test d_teaquadpart for 5TP39
'almost 5TP39=11,13,17,19,29,31,41,43,47,49
dfak d_result, d_teaquadpart, d_teaquadmult
dift d_result = 1
d_try = d_teaquadpart + 2
dfak d_result, d_try, d_teaquadmult
dift d_result = 1
dg_pass1 = d_teaquadpart
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_number = sg_pass1
$dat s_dateline
$cut s_dateline, s_dateline, 1, 20
$sho s_number + " " + s_dateline
$cut s_any, s_dateline, 13, 2
$ift s_any <> s_hour
s_hour = s_any
d_any = d_teaquadpart - d_beghour
ded$ s_any, d_any, 0, 0
ded$ s_out, d_teaquadpart, 0, 0
$app s_out, " " + s_dateline + ", hr=" + s_any
$out s_out
fapp d_any, s_filename, s_out
dbad d_any = 0
d_beghour = d_teaquadpart
endi
d_try = d_teaquadpart + 6
dfak d_result, d_try, d_teaquadmult
dift d_result = 1
d_try = d_teaquadpart + 8
dfak d_result, d_try, d_teaquadmult
dift d_result = 1
d_try = d_teaquadpart + 18
dfak d_result, d_try, d_teaquadmult
dift d_result = 1
d_try = d_teaquadpart + 20
dfak d_result, d_try, d_teaquadmult
dift d_result = 1
d_try = d_teaquadpart + 30
dfak d_result, d_try, d_teaquadmult
dift d_result = 1
d_try = d_teaquadpart + 32
dfak d_result, d_try, d_teaquadmult
dift d_result = 1
d_try = d_teaquadpart + 36
dfak d_result, d_try, d_teaquadmult
dift d_result = 1
d_try = d_teaquadpart + 38
dfak d_result, d_try, d_teaquadmult
dift d_result = 1
$dat s_dot
$cut s_dot, s_dot, 1, 20
dg_pass1 = d_teaquadpart
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_number = sg_pass1
s_out = "] 000:5TP39= " + s_number + " " + s_dot
$out s_out
fapp d_any, s_filename, s_out
dbad d_any = 0
endi
endi
endi
endi
endi
endi
endi
endi
endi
endi
d_teaquadpart = d_teaquadpart + 210
endw
$inp s_any, "return"
ends sub_teaquad_5tp39_find_simple_slow
subr sub_5tp39_find_simple_slow
'updated 2006/09/04, 2005/03/31, 2005/02/25, 2005/02/18
'2005/02/17, 2005/02/10, 2005/02/09, 2004/11/29
'find 5tp39
vari d_any, s_any, d_dot, s_dot, s_out
vari d_loop, d_number
vari d_try, d_result, s_filename
vari s_hour, s_dateline, d_beghour
$sys s_any, 2
$out s_any
'd_loop is loop
d_loop = 1
$out "enter starting number"
$inp s_any, "123456789012345678901"
$ift s_any = "*": d_loop = 2
d_number = 1
$isd d_any, s_any
dift d_any = 1: $tod d_number, s_any
$inp s_filename, "enter output filename"
$ift s_filename = "*": d_loop = 2
'get a proper PIVCOM
'PIVCOM named by Roger Hargrave in 2002
d_any = d_number \ 210 * 210
dift d_any < 210: d_any = d_any + 210
'get a proper beginning number for 5TP39
d_number = d_any - 19
ded$ s_any, d_number, 0, 0
$out "begin=" + s_any
s_hour = "aa"
d_beghour = d_number
dwhi d_loop = 1
'test d_number for 5TP39
'almost 5TP39=11,13,17,19,29,31,41,43,47,49
dfac d_result, d_number
dift d_result = 1
d_try = d_number + 2
dfac d_result, d_try
dift d_result = 1
ded$ s_any, d_number, 0, 0
$dat s_dateline
$cut s_dateline, s_dateline, 1, 20
$sho s_any + " " + s_dateline
$cut s_any, s_dateline, 13, 2
$ift s_any <> s_hour
s_hour = s_any
d_any = d_number - d_beghour
ded$ s_any, d_any, 0, 0
ded$ s_out, d_number, 0, 0
$app s_out, " " + s_dateline + ", hr=" + s_any
$out s_out
fapp d_any, s_filename, s_out
dbad d_any = 0
d_beghour = d_number
endi
d_try = d_number + 6
dfac d_result, d_try
dift d_result = 1
d_try = d_number + 8
dfac d_result, d_try
dift d_result = 1
d_try = d_number + 18
dfac d_result, d_try
dift d_result = 1
d_try = d_number + 20
dfac d_result, d_try
dift d_result = 1
d_try = d_number + 30
dfac d_result, d_try
dift d_result = 1
d_try = d_number + 32
dfac d_result, d_try
dift d_result = 1
d_try = d_number + 36
dfac d_result, d_try
dift d_result = 1
d_try = d_number + 38
dfac d_result, d_try
dift d_result = 1
$dat s_dot
$cut s_dot, s_dot, 1, 20
ded$ s_any, d_number, 0, 0
s_out = "] 000:5TP39= " + s_any + " " + s_dot
$out s_out
fapp d_any, s_filename, s_out
dbad d_any = 0
endi
endi
endi
endi
endi
endi
endi
endi
endi
endi
d_number = d_number + 210
endw
$inp s_any,"return"
ends sub_5tp39_find_simple_slow
subr sub_teaquad_5tp39_by_modulus
'updated 2008/11/23, 2008/11/09
'2008/10/27, 2008/10/20, 2008/09/27, 2008/09/21, 2008/09/16
'2008/09/13, 2008/09/08, 2008/08/27, 2008/08/14, 2008/07/18
'2008/07/16, 2008/07/15, 2008/07/13, 2008/07/12, 2008/07/09
'2008/07/08, 2008/07/07, 2008/07/06, 2008/07/05, 2008/07/03
'2008/07/02, 2008/06/09, 2008/06/02, 2008/05/31, 2008/05/30
'2008/05/15, 2008/05/14, 2008/05/12, 2008/05/10, 2008/04/29
'2008/04/15, 2008/04/10, 2008/04/07, 2008/04/06, 2008/03/17
'2008/03/15, 2008/03/13, 2008/03/06, 2008/02/29, 2008/02/28
'2008/02/21, 2008/02/14, 2008/02/07, 2008/01/08, 2008/01/06
'2008/01/03, 2008/01/02, 2007/12/22, 2007/12/21, 2007/12/09
'2007/11/12, 2007/11/05, 2007/11/03, 2007/10/29, 2007/10/19
'2007/10/18, 2007/10/17, 2007/10/13, 2007/10/08, 2007/10/07
'2007/09/18, 2007/09/16, 2007/09/06, 2007/08/26, 2007/08/25
'2007/08/21, 2007/08/09, 2007/08/02, 2007/07/19, 2007/07/18
'2007/07/17, 2007/07/16, 2007/07/15, 2007/07/07, 2007/07/06
'2007/07/05, 2007/07/01, 2007/06/30, 2007/06/28, 2007/06/13
'2007/06/12, 2007/06/06, 2007/06/02, 2007/05/31, 2007/05/28
'2007/05/21, 2007/05/20, 2007/05/17, 2007/05/11, 2007/05/10
'2007/05/09, 2007/04/25, 2007/04/24, 2007/04/21, 2007/04/20
'2007/04/19, 2007/04/16, 2007/04/11, 2007/04/10, 2007/04/04
'2007/04/03, 2007/04/02, 2007/03/30, 2007/03/29, 2007/03/27
'2007/03/23, 2007/03/22, 2007/03/21, 2007/03/20, 2007/03/17
'2007/03/14, 2007/02/24, 2007/02/22, 2007/01/27, 2007/01/11
'2006/12/21, 2006/12/12, 2006/11/30, 2006/11/24, 2006/11/19
'2006/11/18, 2006/11/16, 2006/11/12, 2006/10/29, 2006/10/27
'2006/10/26, 2006/10/12, 2006/09/30, 2006/09/28, 2006/09/04
'2006/08/22, 2006/08/17, 2006/07/27, 2006/07/23, 2006/07/06
'2006/05/23, 2006/04/23, 2006/03/14, 2006/03/13, 2006/02/27
'2006/02/24, 2006/01/29, 2005/11/29, 2005/08/07, 2005/06/11
'2005/06/07, 2005/06/05, 2005/05/31, 2005/05/17, 2005/05/16
'2005/05/14, 2005/05/11, 2005/05/06, 2005/05/02, 2005/04/29
'2005/04/27, 2005/04/24, 2005/04/23, 2005/04/04, 2005/04/02
'2005/03/31, 2005/03/21, 2005/03/14, 2005/03/10, 2005/03/09
'2005/03/08, 2005/03/03, 2005/03/02, 2005/02/27, 2005/02/24
'find 5TP39s by modulus
'for speed this subroutine uses GTAG and GOTO
vari d_any, s_any, d_dot, s_dot, s_out, d_ask
vari s_test1, s_test2, s_test3, d_test
vari d_good, s_nowdate, s_begindate, s_beginnumber, d_begseconds
vari s_timehournew, s_timehourprev
vari d_primetest, s_primetest
vari d_dayteaquadpart, d_teaquadmaxpart, d_begin
vari d_hourteaquadpart, d_pcount, d_qtpcount, d_hrcount
vari d_billperhour, d_billion
vari d_pivcompart, s_pivcom, d_process, d_y630
vari d_number, s_number, d_index, d_maxindex, d_div
vari d_filebyte, d_loop, s_record, s_file5tp39, s_line
vari s_afile, s_bfile, d_long, d_which
vari d_teaquadone, d_mod1, d_mod2, d_mod3
vari d_teaquad11part, d_teaquad49part, d_teaquadmult
vari d_tqmod11, d_tqmod13, d_tqmod17, d_tqmod19
vari d_tqmod23, d_tqmod29, d_tqmod31, d_tqmod37, d_tqmod41
'd_which=1 for begin again get number from file,1quad
'd_which=2 for enter file code, beg, end
d_which = dg_pass1
$sys s_any, 2
$out s_any
d_process = 1
dpow d_teaquadone, 10, 15
d_teaquadmult = 1
dpow d_billion, 10, 9
$dat s_begindate
$cut s_begindate, s_begindate, 1, 20
d_hrcount = 0
d_pcount = 0
d_qtpcount = 0
'which filename do we want in s_afile
'home1 office computer has s_afile = "a5tp39h1.txt"
s_afile = "a5tp39h1.txt"
s_bfile = "b5tp39h1.txt"
flen d_long, s_afile
dift d_long < 0
'home2 office computer has s_afile = "a5tp39h2.txt"
s_afile = "a5tp39h2.txt"
s_bfile = "b5tp39h2.txt"
flen d_long, s_afile
endi
dift d_long < 0
'home3 office computer has s_afile = "a5tp39h3.txt"
s_afile = "a5tp39h3.txt"
s_bfile = "b5tp39h3.txt"
flen d_long, s_afile
endi
dift d_long < 0
'home4 office computer has s_afile = "a5tp39h4.txt"
s_afile = "a5tp39h4.txt"
s_bfile = "b5tp39h4.txt"
flen d_long, s_afile
endi
dift d_long < 0
'work D's computer has s_afile = "a5tp39d1.txt"
s_afile = "a5tp39d1.txt"
s_bfile = "b5tp39d1.txt"
flen d_long, s_afile
endi
dift d_long < 0
'work D's computer has s_afile = "a5tp39d2.txt"
s_afile = "a5tp39d2.txt"
s_bfile = "b5tp39d2.txt"
flen d_long, s_afile
endi
dift d_long < 0
'work D's computer has s_afile = "a5tp39d3.txt"
s_afile = "a5tp39d3.txt"
s_bfile = "b5tp39d3.txt"
flen d_long, s_afile
endi
dift d_long < 0
'home A's computer has s_afile = "a5tp39a1.txt"
s_afile = "a5tp39a1.txt"
s_bfile = "b5tp39a1.txt"
flen d_long, s_afile
endi
dift d_long < 0
'home A's computer has s_afile = "a5tp39a2.txt"
s_afile = "a5tp39a2.txt"
s_bfile = "b5tp39a2.txt"
flen d_long, s_afile
endi
dift d_long < 0
'home J's computer has s_afile = "a5tp39j1.txt"
s_afile = "a5tp39j1.txt"
s_bfile = "b5tp39j1.txt"
flen d_long, s_afile
endi
dift d_long < 0
'home J's computer has s_afile = "a5tp39j2.txt"
s_afile = "a5tp39j2.txt"
s_bfile = "b5tp39j2.txt"
flen d_long, s_afile
endi
dift d_long < 0
'work Linux computer has s_afile = "a5tp39x1.txt"
s_afile = "a5tp39x1.txt"
s_bfile = "b5tp39x1.txt"
flen d_long, s_afile
endi
dift d_long < 0
'work Linux computer has s_afile = "a5tp39x2.txt"
s_afile = "a5tp39x2.txt"
s_bfile = "b5tp39x2.txt"
flen d_long, s_afile
endi
dift d_long < 0
'work Linux computer has s_afile = "a5tp39x3.txt"
s_afile = "a5tp39x3.txt"
s_bfile = "b5tp39x3.txt"
flen d_long, s_afile
endi
dift d_long < 0
'work Linux computer has s_afile = "a5tp39x4.txt"
s_afile = "a5tp39x4.txt"
s_bfile = "b5tp39x4.txt"
flen d_long, s_afile
endi
dift d_long < 0
'work Linux computer has s_afile = "a5tp39x5.txt"
s_afile = "a5tp39x5.txt"
s_bfile = "b5tp39x5.txt"
flen d_long, s_afile
endi
dift d_long < 0
'work Linux computer has s_afile = "a5tp39x6.txt"
s_afile = "a5tp39x6.txt"
s_bfile = "b5tp39x6.txt"
flen d_long, s_afile
endi
dift d_long < 0
'work R's computer has s_afile = "a5tp39r1.txt"
s_afile = "a5tp39r1.txt"
s_bfile = "b5tp39r1.txt"
flen d_long, s_afile
endi
dift d_long < 0
'work R's computer has s_afile = "a5tp39r2.txt"
s_afile = "a5tp39r2.txt"
s_bfile = "b5tp39r2.txt"
flen d_long, s_afile
endi
dift d_long < 0
'notebook computer Alice has s_afile = "a5tp39n1.txt"
s_afile = "a5tp39n1.txt"
s_bfile = "b5tp39n1.txt"
flen d_long, s_afile
endi
dift d_long < 0
'notebook computer Alice has s_afile = "a5tp39n2.txt"
s_afile = "a5tp39n2.txt"
s_bfile = "b5tp39n2.txt"
flen d_long, s_afile
endi
dift d_long < 0
'notebook computer Scotty has s_afile = "a5tp39n3.txt"
s_afile = "a5tp39n3.txt"
s_bfile = "b5tp39n3.txt"
flen d_long, s_afile
endi
dift d_long < 0
'notebook computer Scotty has s_afile = "a5tp39n4.txt"
s_afile = "a5tp39n4.txt"
s_bfile = "b5tp39n4.txt"
flen d_long, s_afile
endi
dift d_long < 0
'notebook computer A's new has s_afile = "a5tp39n5.txt"
s_afile = "a5tp39n5.txt"
s_bfile = "b5tp39n5.txt"
flen d_long, s_afile
endi
dift d_long < 0
'super1 has s_afile = "a5tp39s1.txt"
s_afile = "a5tp39s1.txt"
s_bfile = "b5tp39s1.txt"
flen d_long, s_afile
endi
dift d_long < 0
'super2 has s_afile = "a5tp39s2.txt"
s_afile = "a5tp39s2.txt"
s_bfile = "b5tp39s2.txt"
flen d_long, s_afile
endi
dift d_long < 0
'super3 has s_afile = "a5tp39s3.txt"
s_afile = "a5tp39s3.txt"
s_bfile = "b5tp39s3.txt"
flen d_long, s_afile
endi
dift d_long < 0
'super4 has s_afile = "a5tp39s4.txt"
s_afile = "a5tp39s4.txt"
s_bfile = "b5tp39s4.txt"
flen d_long, s_afile
endi
dift d_long < 0
'super5 has s_afile = "a5tp39s5.txt"
s_afile = "a5tp39s5.txt"
s_bfile = "b5tp39s5.txt"
flen d_long, s_afile
endi
dift d_long < 0
'super6 has s_afile = "a5tp39s6.txt"
s_afile = "a5tp39s6.txt"
s_bfile = "b5tp39s6.txt"
flen d_long, s_afile
endi
dift d_long < 0
'super7 has s_afile = "a5tp39s7.txt"
s_afile = "a5tp39s7.txt"
s_bfile = "b5tp39s7.txt"
flen d_long, s_afile
endi
'd_which=1 for begin again get number from file,1quad
'd_which=2 for enter file code, beg, end
d_ask = 2
dift d_which = 2: d_ask = 1
dift d_long < 0
d_ask = 1
s_afile = "a5tp39zz.txt"
s_bfile = "b5tp39zz.txt"
endi
dift d_ask = 1
$ch$ s_any, "-", 70
$out s_any
'ask for file code
$out "a1,a2,d1,d2,d3,h1,h2,h3,n1,n2,n3,n4,n5"
$out "s1,s2,s3,s4,s5,s6,r1,r2,x1,x2,x3,x4,x5,x6"
$out "default files=" + s_afile + " and " + s_bfile
s_any = "enter different two letter file code, "
$app s_any, "return for default"
$inp s_any, s_any
$ift s_any = "*"
dinc d_process
dinc d_ask
endi
$tlo s_any, s_any
$len d_any, s_any
dift d_any = 2
s_afile = "a5tp39" + s_any + ".txt"
s_bfile = "b5tp39" + s_any + ".txt"
endi
endi
dift d_process = 1
$ch$ s_any, "-", 70
$out s_any
'get beginning number from file
d_teaquad11part = 0
d_teaquadmult = 0
d_filebyte = 1
d_loop = 1
dwhi d_loop = 1
'read through file to get last number
fsip s_record, s_afile, d_filebyte
dift d_filebyte = 0
dinc d_loop
else
$trb s_record, s_record
$app s_record, " "
$lok d_any, s_record, 1, " "
$cut s_any, s_record, 1, d_any
'is this a 5tp39 found last time
$cut s_dot, s_record, d_any, 999
$trb s_dot, s_dot
$len d_dot, s_dot
'do we have a number
sg_pass1 = s_any
sub_teaquad_from_string
d_any = 2
dift dg_pass1 > 0: d_any = 1
dift dg_pass2 > 0: d_any = 1
dift d_any = 1
'we did get a number
s_line = s_record
d_teaquad11part = dg_pass1
d_teaquadmult = dg_pass2
dift d_dot = 0
'number found was a 5tp39
'we do not want it again
d_teaquad11part = d_teaquad11part + 420
endi
endi
endi
endw
'show d_teaquadmult,d_teaquad11part
ded$ s_any, d_teaquad11part, 0, 0
$out "file mult=" + d_teaquadmult + " part=" + s_any
dift d_teaquad11part > 0: $out "file=" + s_line
dift d_teaquad11part = 0: d_ask = 1
endi
dift d_ask = 1
$ch$ s_any, "-", 70
$out s_any
'ask for beginning number
$out "files=" + s_afile + " and " + s_bfile
'enter beginning number
s_test1 = "99,999,900,000,000,000"
s_test2 = "100,999,900,000,000,000"
s_test3 = "1,999,900,000,000,000"
$out "test1=" + s_test1
$out "test2=" + s_test2
$out "test3=" + s_test3
$out "E15=in quadrillions"
dg_pass1 = d_teaquad11part
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_number = sg_pass1
$out "beg=" + s_number
s_any = "12345678901234567890123, or test1,test2,test3"
$inp s_any, s_any
$ift s_any = "*": dinc d_process
d_test = 0
$tup s_any, s_any
$ift s_any = "TEST1": d_test = 1
$ift s_any = "TEST2": d_test = 2
$ift s_any = "TEST3": d_test = 3
$ift s_any = "TEST1": s_any = s_test1
$ift s_any = "TEST2": s_any = s_test2
$ift s_any = "TEST3": s_any = s_test3
s_test1 = s_any
'do we have a "E15" for quadrillions
$lok d_any, s_any, 1, "E15"
dift d_any > 0
ddec d_any
$cut s_any, s_any, 1, d_any
$app s_any, ",000,000,000,000,000"
$out s_any
endi
$trb s_any, s_any
$len d_any, s_any
dift d_any > 0
sg_pass1 = s_any
sub_teaquad_from_string
d_teaquad11part = dg_pass1
d_teaquadmult = dg_pass2
endi
endi
dift d_process = 1
$ch$ s_any, "-", 70
$out s_any
$out "files=" + s_afile + " and " + s_bfile
'minimum is 1,000,000
dift d_teaquadmult = 0
d_any = 10 ^ 6
dift d_teaquad11part < d_any: d_teaquad11part = d_any
endi
'show d_teaquadmult,d_teaquad11part
ded$ s_any, d_teaquad11part, 0, 0
$out "mult=" + d_teaquadmult + " part=" + s_any
'find the PIVCOM of d_teaquadmult,d_teaquad11part
'term PIVCOM was invented by Roger Hargrave on 2002/08/11
'find d_pivcompart for d_teaquadmult, d_teaquad11part
'old method PIVCOM
dpow d_teaquadone, 10, 15
d_mod1 = d_teaquad11part % 210
d_mod2 = d_teaquadone % 210 * d_teaquadmult
d_mod3 = d_mod1 + d_mod2 % 210
d_pivcompart = d_teaquad11part - d_mod3
'new method PIVCOM
d_mod1 = d_teaquadone % 210
d_mod2 = d_mod1 * d_teaquadmult + d_teaquad11part % 210
d_pivcompart = d_teaquad11part - d_mod2
'show the PIVCOM in d_teaquadmult,d_pivcompart
dg_pass1 = d_pivcompart
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_pivcom = sg_pass1
$out "pivcom=" + s_pivcom
'find the place to begin
d_teaquad11part = d_pivcompart - 19
dift d_teaquad11part < 0
d_teaquad11part = d_teaquad11part + 210
endi
'show begin in d_teaquadmult,d_teaquad11part
ded$ s_any, d_teaquad11part, 0, 0
$out "beg mult=" + d_teaquadmult + " part=" + s_any
$ch$ s_any, "-", 70
$out s_any
'output beginning numbers to file
$dat s_nowdate
$cut s_nowdate, s_nowdate, 1, 20
dg_pass1 = d_teaquad11part
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_beginnumber = sg_pass1
'output beginning number
s_out = "begin=" + s_beginnumber + " " + s_nowdate
$app s_out, " " + s_afile
$out s_out
'output name of afile to file
fapp d_any, s_afile, s_out
dbad d_any = 0
'output interpreter name and build
$sys s_out, 3
$out s_out
fapp d_any, s_afile, s_out
dbad d_any = 0
'output current program name and build
$out sg_build
fapp d_any, s_afile, sg_build
dbad d_any = 0
'output interpreter path
$sys s_out, 1
$out s_out
fapp d_any, s_afile, s_out
dbad d_any = 0
'put d_maxindex primes in decimal array
d_maxindex = 10000
d_number = 43
d_index = 1
dwhi d_index <= d_maxindex
d_mod1 = 9999
dwhi d_mod1 > 1
dfac d_mod1, d_number
dift d_mod1 > 1: d_number = d_number + 2
endw
dtoi d_index, d_number
d_number = d_number + 2
dinc d_index
endw
itod d_any, 1
itod d_dot, d_maxindex
s_any = "array from=" + d_any + " to " + d_dot
$app s_any, " ct=" + d_maxindex
$out s_any
s_timehourprev = "x"
d_hourteaquadpart = 0
endi
dift d_process = 1
$ch$ s_any, "-", 70
$out s_any
'output beginning number
$out "beg=" + s_beginnumber
'get the maximum number to go to
d_teaquadmaxpart = d_teaquadone
dg_pass1 = d_teaquadmaxpart
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_number = sg_pass1
$out "max=" + s_number
endi
d_tqmod11 = d_teaquadone % 11 * d_teaquadmult
d_tqmod13 = d_teaquadone % 13 * d_teaquadmult
d_tqmod17 = d_teaquadone % 17 * d_teaquadmult
d_tqmod19 = d_teaquadone % 19 * d_teaquadmult
d_tqmod23 = d_teaquadone % 23 * d_teaquadmult
d_tqmod29 = d_teaquadone % 29 * d_teaquadmult
d_tqmod31 = d_teaquadone % 31 * d_teaquadmult
d_tqmod37 = d_teaquadone % 37 * d_teaquadmult
d_tqmod41 = d_teaquadone % 41 * d_teaquadmult
'p49 is d_teaquad49part, d_teaquadmult not p11
d_teaquad49part = d_teaquad11part - 210 + 38
'adjust d_teaquad49part to make d_pivcompart mod 11 = 4 or 7
d_pivcompart = d_teaquad49part - 19
d_mod1 = d_teaquadone % 11 * d_teaquadmult + d_pivcompart % 11
dift d_mod1 <= 4
d_any = 4 - d_mod1 * 210
d_teaquad49part = d_teaquad49part + d_any
d_y630 = 1
else
dift d_mod1 <= 7
d_any = 7 - d_mod1 * 210
d_teaquad49part = d_teaquad49part + d_any
d_y630 = 2
else
d_any = 15 - d_mod1 * 210
d_teaquad49part = d_teaquad49part + d_any
d_y630 = 1
endi
endi
$dat s_any
s_out = "beg=" + s_any
$out s_out
fapp d_any, s_afile, s_out
dbad d_any = 0
d_dayteaquadpart = d_teaquad49part - 38
dsec d_begseconds
dift d_process = 1
'main loop gtag here
gtag tag_nextnumber
'increment d_primetest = first prime
'd_teaquad49part = d_teaquad49part + 210
dift d_y630 = 1
'increment by 210 * 3 = 630
d_teaquad49part = d_teaquad49part + 630
dinc d_y630
else
'increment by 210 * 8 = 1680
d_teaquad49part = d_teaquad49part + 1680
ddec d_y630
endi
'mod 13
'p49%13 must be 1, 3, 9, or 11 to be good
'd_teaquadone % 13 = 12
d_mod1 = d_tqmod13 + d_teaquad49part % 13
dift d_mod1 <> 1
dift d_mod1 <> 3
dift d_mod1 <> 9
dift d_mod1 <> 11: goto tag_nextnumber
endi
endi
endi
'mod 17
'p49%17 must not be <5, 6, 8, 13, 15 to be good
'd_teaquadone % 17 = 12
d_mod1 = d_tqmod17 + d_teaquad49part % 17
dift d_mod1 < 5: goto tag_nextnumber
dift d_mod1 = 6: goto tag_nextnumber
dift d_mod1 = 8: goto tag_nextnumber
dift d_mod1 = 13: goto tag_nextnumber
dift d_mod1 = 15: goto tag_nextnumber
'mod 19
'p49%19 must not be <3, 6, 8, 11, 13, >16 to be good
'd_teaquadone % 19 = 8
d_mod1 = d_tqmod19 + d_teaquad49part % 19
dift d_mod1 < 3: goto tag_nextnumber
dift d_mod1 = 6: goto tag_nextnumber
dift d_mod1 = 8: goto tag_nextnumber
dift d_mod1 = 11: goto tag_nextnumber
dift d_mod1 = 13: goto tag_nextnumber
dift d_mod1 > 16: goto tag_nextnumber
'mod 23
'p49%23 must not be 0, 2, >5 and <10, 13, 15, 18, 20 to be good
'd_teaquadone % 23 = 5
d_mod1 = d_tqmod23 + d_teaquad49part % 23
dift d_mod1 = 0: goto tag_nextnumber
dift d_mod1 = 2: goto tag_nextnumber
dift d_mod1 > 5
dift d_mod1 < 10: goto tag_nextnumber
endi
dift d_mod1 = 13: goto tag_nextnumber
dift d_mod1 = 15: goto tag_nextnumber
dift d_mod1 = 18: goto tag_nextnumber
dift d_mod1 = 20: goto tag_nextnumber
'mod 29
'p49%29 must not be <4, >5 and <10, 18, 20 to be good
'd_teaquadone % 29 = 19
d_mod1 = d_tqmod29 + d_teaquad49part % 29
dift d_mod1 < 4: goto tag_nextnumber
dift d_mod1 > 5
dift d_mod1 < 10: goto tag_nextnumber
endi
dift d_mod1 = 18: goto tag_nextnumber
dift d_mod1 = 20: goto tag_nextnumber
'mod 31
'p49%31 must not be <3, >4 and <9, 18, 20, 30 to be good
'd_teaquadone % 31 = 1
d_mod1 = d_tqmod31 + d_teaquad49part % 31
dift d_mod1 < 3: goto tag_nextnumber
dift d_mod1 > 4
dift d_mod1 < 9: goto tag_nextnumber
endi
dift d_mod1 = 18: goto tag_nextnumber
dift d_mod1 = 20: goto tag_nextnumber
dift d_mod1 = 30: goto tag_nextnumber
'mod 37
'p49%37 must not be <3, 6, 8, 18, 20, 30, 32, 36 to be good
'd_teaquadone % 37 = 1
d_mod1 = d_tqmod37 + d_teaquad49part % 37
dift d_mod1 < 3: goto tag_nextnumber
dift d_mod1 = 6: goto tag_nextnumber
dift d_mod1 = 8: goto tag_nextnumber
dift d_mod1 = 18: goto tag_nextnumber
dift d_mod1 = 20: goto tag_nextnumber
dift d_mod1 = 30: goto tag_nextnumber
dift d_mod1 = 32: goto tag_nextnumber
dift d_mod1 = 36: goto tag_nextnumber
'mod 41
'p49%41 bad are 0,2,6,8,18,20,30,32,36,38
'd_teaquadone % 41 = 1
d_mod1 = d_tqmod41 + d_teaquad49part % 41
dift d_mod1 = 0: goto tag_nextnumber
dift d_mod1 = 2: goto tag_nextnumber
dift d_mod1 = 6: goto tag_nextnumber
dift d_mod1 = 8: goto tag_nextnumber
dift d_mod1 = 18: goto tag_nextnumber
dift d_mod1 = 20: goto tag_nextnumber
dift d_mod1 = 30: goto tag_nextnumber
dift d_mod1 = 32: goto tag_nextnumber
dift d_mod1 = 36: goto tag_nextnumber
dift d_mod1 = 38: goto tag_nextnumber
'43 is in the array with index=1
d_index = 1
dwhi d_index <= d_maxindex
itod d_div, d_index
'd_teaquadone is 10^15
d_mod1 = d_teaquadone % d_div * d_teaquadmult + d_teaquad49part % d_div
dift d_mod1 < 39
dift d_mod1 = 0: goto tag_nextnumber
dift d_mod1 = 2: goto tag_nextnumber
dift d_mod1 = 6: goto tag_nextnumber
dift d_mod1 = 8: goto tag_nextnumber
dift d_mod1 = 18: goto tag_nextnumber
dift d_mod1 = 20: goto tag_nextnumber
dift d_mod1 = 30: goto tag_nextnumber
dift d_mod1 = 32: goto tag_nextnumber
dift d_mod1 = 36: goto tag_nextnumber
dift d_mod1 = 38: goto tag_nextnumber
endi
dinc d_index
endw
'test the p11 number
d_teaquad11part = d_teaquad49part - 38
dfak d_good, d_teaquad11part, d_teaquadmult
dift d_good <> 1: goto tag_nextnumber
'we have a prime beginning
dinc d_pcount
'get second digit of the hour to test for hour change
'12345678901234567890123456789012345
'17-DEC-2002 03:56:22 20021217035622
$dat s_nowdate
$cut s_timehournew, s_nowdate, 13, 2
'get s_nowdate
'12345678901234567890123456789012345
'17-DEC-2002 03:56:22 20021217035622
$cut s_nowdate, s_nowdate, 1, 20
dg_pass1 = d_teaquad11part
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_primetest = sg_pass1
s_out = s_primetest + " " + s_nowdate
$sho s_out
$ift s_timehournew <> s_timehourprev
'we have new hour
s_timehourprev = s_timehournew
dinc d_hrcount
'get d_billperhour change
d_dot = d_teaquad11part - d_hourteaquadpart
'first time through we want zero
dift d_hourteaquadpart = 0: d_dot = 0
d_hourteaquadpart = d_teaquad11part
'divide by a billion and round to a whole number
d_billperhour = d_dot / d_billion @ 0
$app s_out, " bph:" + d_billperhour + " " + d_hrcount
$app s_out, " " + d_qtpcount + " " + d_pcount
d_pcount = 0
fapp d_any, s_afile, s_out
dbad d_any = 0
$out s_out
$ift s_timehournew = "06"
'12345678901234567890
'Program: tinytea.exe, build 523, 2008/03/17
'Program: teaprime.tea, build=532, 2008/03/15
'output interpreter name and build
'with begin date and d_qtpcount
$sys s_dot, 3
$cut s_dot, s_dot, 10, 99
$trb s_dot, s_dot
s_out = s_dot + " beg=" + s_begindate
$app s_out, " " + d_qtpcount
fapp d_any, s_afile, s_out
dbad d_any = 0
$out s_out
'output teaprime.tea build and lines
$cut s_dot, sg_build, 10, 99
$trb s_dot, s_dot
'get the lines of Teapro
dsys d_any, 2
ded$ s_any, d_any, 0, 0
s_out = s_dot + ", lines=" + s_any
'get day part diff
d_any = d_teaquad11part - d_dayteaquadpart
'we do not prorate
'get trillion per day
d_dot = 10 ^ 12
d_any = d_any / d_dot
dto$ s_any, d_any, 5, 3
$app s_out, " tpd:" + s_any
d_dayteaquadpart = d_teaquad11part
fapp d_any, s_afile, s_out
dbad d_any = 0
$out s_out
endi
endi
dift d_teaquad11part > d_teaquadmaxpart
'we are at end of this session of numbers
'output current prime Teaquad number
dg_pass1 = d_teaquad11part
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_primetest = sg_pass1
s_out = s_primetest + " " + s_nowdate + " " + d_pcount
$out s_out
dift d_test > 0
$out s_test1
dsec d_any
d_any = d_any - d_begseconds
$out "test" + d_test + " seconds=" + d_any
$inp s_any, "stop"
goto tag_endsubr
endi
'output beginning and ending dates and afile
s_out = "beg=" + s_begindate
$app s_out, " end=" + s_nowdate
$app s_out, " " + s_afile
$out s_out
fapp d_any, s_afile, s_out
dbad d_any = 0
fapp d_any, s_bfile, s_out
dbad d_any = 0
'begin and end primes
s_out = "beg=" + s_beginnumber + " end=" + s_primetest
$out s_out
fapp d_any, s_afile, s_out
dbad d_any = 0
fapp d_any, s_bfile, s_out
dbad d_any = 0
'output afile name and line count
dsys d_any, 2
ded$ s_any, d_any, 0, 0
s_out = s_afile + " lines=" + s_any
$out s_out
fapp d_any, s_afile, s_out
dbad d_any = 0
'output interpreter path
$sys s_dot, 1
s_out = "path=" + s_dot
fapp d_any, s_afile, s_out
dbad d_any = 0
'output interpreter name and build
$sys s_out, 3
fapp d_any, s_afile, s_out
dbad d_any = 0
fapp d_any, s_bfile, s_out
dbad d_any = 0
'output current Teapro program name and build
s_out = sg_build
fapp d_any, s_afile, s_out
dbad d_any = 0
fapp d_any, s_bfile, s_out
dbad d_any = 0
'if j1,j2,r1,r2 we do not want to end program
'123456789012
'a5tp39j1.txt
$cut s_any, s_afile, 7, 1
d_dot = 1
$ift s_any = "j": dinc d_dot
$ift s_any = "r": dinc d_dot
dift d_dot = 1
'end current program
sub_path_prog_memory
$inp s_any, "done"
endp
endi
'if continuing we need to bump d_teaquadmaxpart
'd_teaquadone is 1E15 or 10^15
dinc d_teaquadmult
'initialize various counters
d_dayteaquadpart = 0
d_hrcount = 0
d_qtpcount = 0
d_pcount = 0
d_tqmod11 = d_teaquadone % 11 * d_teaquadmult
d_tqmod13 = d_teaquadone % 13 * d_teaquadmult
d_tqmod17 = d_teaquadone % 17 * d_teaquadmult
d_tqmod19 = d_teaquadone % 19 * d_teaquadmult
d_tqmod23 = d_teaquadone % 23 * d_teaquadmult
d_tqmod29 = d_teaquadone % 29 * d_teaquadmult
d_tqmod31 = d_teaquadone % 31 * d_teaquadmult
d_tqmod37 = d_teaquadone % 37 * d_teaquadmult
d_tqmod41 = d_teaquadone % 41 * d_teaquadmult
d_teaquad11part = d_teaquad11part - d_teaquadone
d_teaquad49part = d_teaquad49part - d_teaquadone
endi
'test the p13 number
d_any = d_teaquad11part + 2
dfak d_good, d_any, d_teaquadmult
dift d_good <> 1: goto tag_nextnumber
'test the p17 number
d_any = d_teaquad11part + 6
dfak d_good, d_any, d_teaquadmult
dift d_good <> 1: goto tag_nextnumber
'test the p19 number
d_any = d_teaquad11part + 8
dfak d_good, d_any, d_teaquadmult
dift d_good <> 1: goto tag_nextnumber
'test the p29 number
d_any = d_teaquad11part + 18
dfak d_good, d_any, d_teaquadmult
dift d_good <> 1: goto tag_nextnumber
'test the p31 number
d_any = d_teaquad11part + 20
dfak d_good, d_any, d_teaquadmult
dift d_good <> 1: goto tag_nextnumber
'test the p41 number
d_any = d_teaquad11part + 30
dfak d_good, d_any, d_teaquadmult
dift d_good <> 1: goto tag_nextnumber
'test the p43 number
d_any = d_teaquad11part + 32
dfak d_good, d_any, d_teaquadmult
dift d_good <> 1: goto tag_nextnumber
'test the p47 number
d_any = d_teaquad11part + 36
dfak d_good, d_any, d_teaquadmult
dift d_good <> 1: goto tag_nextnumber
'test the p49 number
dfak d_good, d_teaquad49part, d_teaquadmult
dift d_good <> 1: goto tag_nextnumber
'we have a teaquad 5TP39
dinc d_qtpcount
dg_pass1 = d_teaquad11part
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_primetest = sg_pass1
'show the just found 5TP39
$dat s_nowdate
$cut s_nowdate, s_nowdate, 1, 20
s_out = "] 000:5TP39= " + s_primetest
$app s_out, " " + s_nowdate + " " + d_qtpcount
$out s_out
fapp d_any, s_afile, s_out
dbad d_any = 0
fapp d_any, s_bfile, s_out
dbad d_any = 0
fapp d_any, s_afile, s_primetest
dbad d_any = 0
dift d_test = 1
dift d_qtpcount >= 1
dsec d_any
d_any = d_any - d_begseconds
$out "seconds=" + d_any
$inp s_any, "stop"
goto tag_endsubr
endi
endi
goto tag_nextnumber
endi
gtag tag_endsubr
ends sub_teaquad_5tp39_by_modulus
subr sub_5tp39_two_files_compare
'updated 2007/12/13
'2007/12/10, 2007/10/27, 2007/10/23, 2007/10/04, 2007/08/26
'2007/07/31, 2006/07/28, 2006/02/25, 2005/10/15, 2004/05/11
vari d_any, s_any, d_dot, s_dot, s_out
vari s_filename1, s_filedata1, s_filename2, s_filedata2
vari d_process, d_loop, d_big, d_ctlines, d_ctskipped
vari d_ctfound, d_ctnotfound, s_prev5tp39, s_dashes
vari s_5tp39, s_lookstring, d_nofindfile, d_nostop
vari d_ctdata1, d_ctdata2
$ch$ s_dashes, "-", 70
d_process = 1
dift d_process = 1
$out "5tp39s in file1 are looked up in file2"
$inp s_filename1, "enter filename1"
$ift s_filename1 = "*": dinc d_process
endi
dift d_process = 1
$inp s_filename2, "enter filename2"
$ift s_filename2 = "*": dinc d_process
endi
dift d_process = 1
finp s_filedata1, s_filename1
finp s_filedata2, s_filename2
$bes s_filedata1, s_filedata1
$bes s_filedata2, s_filedata2
$cup s_filedata1, s_filedata1
$cup s_filedata2, s_filedata2
s_lookstring = "5TP39="
$cnt d_ctdata1, s_filedata1, s_lookstring
$cnt d_ctdata2, s_filedata2, s_lookstring
$len d_any, s_filedata1
s_out = s_filename1 + ", length=" + d_any
$app s_out, ", count=" + d_ctdata1
$out s_out
dift d_any = 0: dinc d_process
endi
dift d_process = 1
$len d_any, s_filedata2
s_out = s_filename2 + ", length=" + d_any
$app s_out, ", count=" + d_ctdata2
$out s_out
dift d_any = 0: dinc d_process
endi
dift d_process = 1
$inp s_any, "1=make new no find file=nofind.txt"
$ift s_any = "*": dinc d_process
d_nofindfile = 2
$ift s_any = "1"
d_nofindfile = 1
fdel d_any, "nofind.txt"
endi
endi
dift d_process = 1
$inp s_any, "1=no stop"
$ift s_any = "*": dinc d_process
d_nostop = 2
$ift s_any = "1": d_nostop = 1
endi
dift d_process = 1
$out "from " + s_filename1 + " looking in " + s_filename2
$inp s_any, "return to begin"
$ift s_any = "*": dinc d_process
endi
d_ctskipped = 0
d_ctdata1 = 0
d_ctfound = 0
d_ctnotfound = 0
d_ctlines = 0
dpow d_big, 10, 10
d_loop = d_process
dwhi d_loop = 1
's_lookstring is "5TP39="
$lok d_dot, s_filedata1, 1, s_lookstring
dift d_dot = 0
'no more are in s_filedata1
dinc d_loop
else
'we found a s_lookstring in s_filedata1
'tell
dinc d_ctdata1
d_any = d_ctdata1 % 100
dift d_any = 0: $sho d_ctdata1
'5TP39=^
'0123456
d_dot = d_dot + 6
$cut s_filedata1, s_filedata1, d_dot, d_big
$trb s_filedata1, s_filedata1
$lok d_dot, s_filedata1, 1, " "
$cut s_5tp39, s_filedata1, 1, d_dot
$trb s_5tp39, s_5tp39
'1,234,567,890,123,456
$len d_any, s_5tp39
dift d_any > 20
'output dash line between quadrillions
d_any = d_any - 20
$cut s_any, s_5tp39, 1, d_any
$cut s_dot, s_prev5tp39, 1, d_any
$ift s_any <> s_dot: $out s_any + "E15" + s_dashes
endi
s_prev5tp39 = s_5tp39
s_5tp39 = "5TP39= " + s_5tp39 + " "
'is it in s_filedata2
$lok d_dot, s_filedata2, 1, s_5tp39
dift d_dot > 0
'in both
dinc d_ctfound
dift d_ctskipped > 0
dift d_ctskipped < 20
s_any = " count of skipped=" + d_ctskipped
$out s_5tp39 + s_any
$inp s_any, "return"
$ift s_any = "*": dinc d_loop
endi
endi
d_ctskipped = 0
else
'not found in s_filedata2
dinc d_ctskipped
dinc d_ctnotfound
s_out = d_ctnotfound
$app s_out, ". " + s_5tp39
'$app s_out, " in " + s_filename1
'$app s_out, " but not in " + s_filename2
$out s_out
dift d_nofindfile = 1
fapp d_any, "nofind.txt", s_out
dbad d_any = 0
endi
dift d_nostop = 1: d_ctlines = 0
dinc d_ctlines
dift d_ctlines >= 20
d_ctlines = 0
$inp s_any, "more"
$ift s_any = "*": dinc d_loop
endi
endi
endi
endw
$out "found=" + d_ctfound + ", not=" + d_ctnotfound
sub_path_prog_memory
$inp s_any, "done"
ends sub_5tp39_two_files_compare
subr sub_5tp39_validate_in_a_file
'updated 2006/11/24, 2006/08/04, 2006/07/19
'2006/03/08, 2006/03/07, 2006/03/06, 2006/02/25, 2005/06/09
'2005/05/19, 2005/05/02, 2005/05/01, 2005/04/29, 2005/04/20
'2005/04/19, 2005/04/08, 2005/03/31, 2005/03/07, 2005/03/06
vari d_any, s_any, d_dot, s_dot, s_tap, s_out
vari d_filebyte, s_record, s_filename, d_loop, d_good
vari s_number, d_number, d_seconds, d_begin, d_count
vari d_yestest, d_process, d_findclosetwin, d_true
vari d_3cluster, d_1hold, d_2hold, d_diff
vari d_largegap, d_smallgap
vari d_ypivcom, d_pivcom, s_factors
$sys s_any, 2
$out s_any
d_process = 1
dift d_process = 1
$inp s_any, "1=do not test for 5TP39, default=do test"
$ift s_any = "*": dinc d_process
d_yestest = 1
$ift s_any = "1": dinc d_yestest
endi
dift d_process = 1
$inp s_any, "enter number to begin, default = 6.4*10^15"
$ift s_any = "*": dinc d_process
$tod d_begin, "6,400,000,000,000,000"
$isd d_any, s_any
dift d_any = 1: $tod d_begin, s_any
endi
dift d_process = 1
d_ypivcom = 2
$inp s_any, "1=pivcom factors"
$ift s_any = "*": dinc d_process
$ift s_any = "1": d_ypivcom = 1
endi
dift d_process = 1
$inp s_any, "enter amount for a 3cluster, default=0"
$ift s_any = "*": dinc d_process
d_3cluster = 0
$isd d_any, s_any
dift d_any = 1: $tod d_3cluster, s_any
endi
dift d_process = 1
d_largegap = 0
$inp s_any, "1 = large gap of 15*10^12 or enter other"
$ift s_any = "*": dinc d_process
$ift s_any = "1": s_any = "15,000,000,000,000"
$isd d_any, s_any
dift d_any = 1: $tod d_largegap, s_any
endi
dift d_process = 1
d_smallgap = 0
$inp s_any, "1 = small gap of 5*10^9 or enter other"
$ift s_any = "*": dinc d_process
$ift s_any = "1": s_any = "5,000,000,000"
$isd d_any, s_any
dift d_any = 1: $tod d_smallgap, s_any
$out "3cluster=" + d_3cluster
s_filename = "fix5tp39.exp"
$out "input file=" + s_filename
endi
dift d_process = 1
d_findclosetwin = 0
$inp s_any, "1 = find close twin"
$ift s_any = "*": dinc d_process
$ift s_any = "1": d_findclosetwin = 1
endi
d_count = 0
d_filebyte = 1
d_loop = d_process
dwhi d_loop = 1
d_good = 1
fsip s_record, s_filename, d_filebyte
dift d_filebyte = 0
dinc d_good
dinc d_loop
endi
dift d_good = 1
$lok d_dot, s_record, 1, "5TP39="
dift d_dot = 0: dinc d_good
endi
dift d_good = 1
'5TP39= 39,713...
d_dot = d_dot + 7
$lok d_any, s_record, d_dot, " "
d_any = d_any - d_dot + 1
$cut s_number, s_record, d_dot, d_any
$trb s_number, s_number
$isd d_any, s_number
dift d_any <> 1
$inp s_any, "bad number=" + s_number
$ift s_any = "*": dinc d_loop
dinc d_good
endi
endi
dift d_good = 1
$tod d_number, s_number
'skip if before beginning
dift d_number < d_begin: dinc d_good
endi
dift d_good = 1
dift d_yestest = 1
dg_pass1 = d_number
sub_5tp39_test
d_true = dg_pass2
d_seconds = dg_pass3
else
d_true = 1
d_seconds = 0
endi
dift d_findclosetwin = 1
dift d_true = 1
'find close twin
dg_pass1 = d_number + 38
dg_pass2 = 2
sub_find_close_twin
dg_pass1 = d_number
dg_pass2 = -2
sub_find_close_twin
endi
endi
dift d_true <> 1
'do not have 5TP39
$inp s_any, "not 5TP39= " + s_number
$ift s_any = "*": dinc d_loop
else
'have 5TP39
dinc d_count
s_factors = sg_nothing
dift d_ypivcom = 1
d_dot = d_number + 19 \ 210
dfac d_any, d_dot
$app s_factors, ",pfac=" + d_any
endi
s_out = d_count + ". 5TP39= " + s_number
$app s_out, " secs= " + d_seconds
$app s_out, " " + s_factors
$out s_out
'small gap
dift d_smallgap > 0
d_diff = d_number - d_1hold
dift d_diff < d_smallgap
ded$ s_any, d_number,0 ,0
ded$ s_dot, d_1hold, 0, 0
ded$ s_tap, d_diff, 0, 0
s_out = "small gap: " + s_any
$app s_out, ", " + s_dot
$app s_out, " of " + s_tap
$inp s_any, s_out
endi
endi
'large gap
dift d_largegap > 0
d_diff = d_number - d_1hold
dift d_diff > d_largegap
ded$ s_any, d_1hold, 0, 0
$out "large gap: " + s_any
ded$ s_any, d_number,0 ,0
$out "large gap: " + s_any
ded$ s_any, d_diff, 0, 0
$out "diff: " + s_any
$inp s_any, "more"
$ift s_any = "*": dinc d_loop
endi
endi
'3cluster
dift d_3cluster > 0
d_diff = d_number - d_2hold
dift d_diff < d_3cluster
ded$ s_any, d_2hold, 0, 0
$out "3cluster=" + s_any
ded$ s_any, d_1hold, 0, 0
$out "3cluster=" + s_any
ded$ s_any, d_number, 0, 0
$out "3cluster=" + s_any
ded$ s_any, d_diff, 0, 0
$out "difference=" + s_any
$inp s_any, "3cluster, * to end"
$ift s_any = "*": dinc d_loop
endi
endi
d_2hold = d_1hold
d_1hold = d_number
endi
endi
endw
$inp s_any, "count=" + d_count
ends sub_5tp39_validate_in_a_file
subr sub_5tp39_rolling_test_primes
'updated 2007/07/08, 2007/07/07, 2007/07/06
vari d_any, s_any, d_dot, s_dot, s_out
vari d_process, d_yes, s_bads, s_goods
vari d_num, d_mod, d_test, d_count1, d_count2
vari d_p11, d_p13, d_p17, d_p19, d_p29
vari d_p31, d_p41, d_p43, d_p47, d_p49
'71,525,244,611 is the third 5tp39
d_p11 = 71525244611
d_p13 = d_p11 + 2
d_p17 = d_p11 + 6
d_p19 = d_p11 + 8
d_p29 = d_p11 + 18
d_p31 = d_p11 + 20
d_p41 = d_p11 + 30
d_p43 = d_p11 + 32
d_p47 = d_p11 + 36
d_p49 = d_p11 + 38
d_process = 1
dift d_process = 1
$inp s_any, "enter test number ie. 17, 19"
$ift s_any = "*": dinc d_process
$isd d_any, s_any
dift d_any = 1: $tod d_num, s_any
endi
s_bads = sg_nothing
s_goods = sg_nothing
dift d_process = 1
d_mod = 0
dwhi d_mod < d_num
d_test = d_p49 - d_mod
d_yes = 1
dift d_mod = 0: dinc d_yes
dift d_test = d_p11: dinc d_yes
dift d_test = d_p13: dinc d_yes
dift d_test = d_p17: dinc d_yes
dift d_test = d_p19: dinc d_yes
dift d_test = d_p29: dinc d_yes
dift d_test = d_p31: dinc d_yes
dift d_test = d_p41: dinc d_yes
dift d_test = d_p43: dinc d_yes
dift d_test = d_p47: dinc d_yes
dift d_test = d_p49: dinc d_yes
d_test = d_test - d_num
dift d_test = d_p11: dinc d_yes
dift d_test = d_p13: dinc d_yes
dift d_test = d_p17: dinc d_yes
dift d_test = d_p19: dinc d_yes
dift d_test = d_p29: dinc d_yes
dift d_test = d_p31: dinc d_yes
dift d_test = d_p41: dinc d_yes
dift d_test = d_p43: dinc d_yes
dift d_test = d_p47: dinc d_yes
dift d_test = d_p49: dinc d_yes
d_test = d_test - d_num
dift d_test = d_p11: dinc d_yes
dift d_test = d_p13: dinc d_yes
dift d_test = d_p17: dinc d_yes
dift d_test = d_p19: dinc d_yes
dift d_test = d_p29: dinc d_yes
dift d_test = d_p31: dinc d_yes
dift d_test = d_p41: dinc d_yes
dift d_test = d_p43: dinc d_yes
dift d_test = d_p47: dinc d_yes
dift d_test = d_p49: dinc d_yes
d_test = d_test - d_num
dift d_test = d_p11: dinc d_yes
dift d_test = d_p13: dinc d_yes
dift d_test = d_p17: dinc d_yes
dift d_test = d_p19: dinc d_yes
dift d_test = d_p29: dinc d_yes
dift d_test = d_p31: dinc d_yes
dift d_test = d_p41: dinc d_yes
dift d_test = d_p43: dinc d_yes
dift d_test = d_p47: dinc d_yes
dift d_test = d_p49: dinc d_yes
dift d_yes = 1: $app s_goods, d_mod + " "
dift d_yes <> 1: $app s_bads, d_mod + " "
s_out = "number=" + d_num + " mod=" + d_mod + " result="
dift d_yes = 1: $app s_out, " yes"
dift d_yes <> 1: $app s_out, " no"
$out s_out
dift d_yes = 1: dinc d_count1
dift d_yes <> 1: dinc d_count2
dinc d_mod
'dg_pass1 = d_mod
'sub_next_prime
'd_mod = dg_pass1
endw
endi
$out "bad mods=" + s_bads
$out "good mods=" + s_goods
dpow d_any, 10, 15
d_any = d_any % d_num
$out "10^15%" + d_num + "=" + d_any
$inp s_any, "done, yes=" + d_count1 + " no=" + d_count2
ends sub_5tp39_rolling_test_primes
subr sub_next_prime
'updated 2007/07/06
vari d_any, s_any, d_dot, s_dot, s_out
vari d_number, d_loop
d_number = dg_pass1 + 1
d_any = d_number % 2
dift d_any = 0: dinc d_number
d_loop = 1
dwhi d_loop = 1
dfac d_any, d_number
dift d_any = 1
dinc d_loop
else
d_number = d_number + 2
endi
endw
dg_pass1 = d_number
ends sub_next_prime
subr sub_find_close_twin
'updated 2006/04/05, 2006/03/08, 2006/03/07
vari d_any, s_any, d_dot, s_dot, s_out
vari d_number0, d_number1, d_number2, d_factor
vari s_number0, d_loop, d_delta, d_2delta
d_number0 = dg_pass1
d_delta = dg_pass2
dift d_delta <> -2: d_delta = 2
d_2delta = 2 * d_delta
d_number1 = d_number0 + d_delta
d_loop = 1
dwhi d_loop = 1
'find the first twin from a number
dfac d_factor, d_number1
dift d_factor = 1
d_number2 = d_number1 + d_delta
dfac d_factor, d_number2
dift d_factor = 1
'we have a prime twin
ded$ s_number0, d_number0, 0, 0
ded$ s_any, d_number1, 0, 0
d_any = d_number1 - d_number0
s_out = "5TP39=" + s_number0 + ", twin="
$app s_out, s_any + ", diff=" + d_any
$out s_out
fapp d_any, "twins.txt", s_out
dbad d_any = 0
dinc d_loop
else
d_number1 = d_number1 + d_2delta
endi
else
dift d_factor = 2: dinc d_loop
d_number1 = d_number1 + d_delta
endi
'no use going too far
d_any = d_number1 - d_number0
dabs d_any, d_any
dift d_any > 23: dinc d_loop
endw
ends sub_find_close_twin
subr sub_5tp39_factors
'updated 2005/05/02
'factors of dg_pass1 into sg_pass1
vari d_any, s_any, d_dot, s_dot
vari d_number, d_factor, s_result
vari d_good, d_loop
d_number = dg_pass1 / 210
s_result = sg_nothing
d_loop = 1
dwhi d_loop = 1
dfac d_factor, d_number
$app s_result, "," + d_factor
dift d_factor > 1
d_number = d_number / d_factor
else
dinc d_loop
endi
endw
sg_pass1 = s_result
ends sub_5tp39_pivcom_factors
subr sub_5tp39_test
'updated 2005/03/06
vari d_any, s_any, d_dot, s_dot
vari d_number, d_good, d_seconds
dsec d_seconds
'11,13,17,19,29,31,41,43,47,49
d_number = dg_pass1
dfac d_good, d_number
d_any = d_number + 2
dift d_good = 1: dfac d_good, d_any
d_any = d_number + 6
dift d_good = 1: dfac d_good, d_any
d_any = d_number + 8
dift d_good = 1: dfac d_good, d_any
d_any = d_number + 18
dift d_good = 1: dfac d_good, d_any
d_any = d_number + 20
dift d_good = 1: dfac d_good, d_any
d_any = d_number + 30
dift d_good = 1: dfac d_good, d_any
d_any = d_number + 32
dift d_good = 1: dfac d_good, d_any
d_any = d_number + 36
dift d_good = 1: dfac d_good, d_any
d_any = d_number + 38
dift d_good = 1: dfac d_good, d_any
dsec d_any
dg_pass2 = d_good
dg_pass3 = d_any - d_seconds
ends sub_5tp39_test
subr sub_teaquad_5tp39_test_a_number
'updated 2007/12/01, 2007/09/06
'2007/02/25, 2006/07/29, 2005/07/23, 2005/05/01, 2005/04/17
'2005/04/14, 2005/03/31, 2005/03/27, 2005/03/18, 2005/03/16
vari d_any, s_any, d_dot, s_dot, s_out
vari d_process, d_loop, d_factor, s_dashes, d_yes, d_count
vari s_number, d_number, d_trynum, s_trynum
vari d_seconds1, d_seconds2, d_seconds3
vari d_teaquadpart, d_teaquadmult
vari d_tryteaquadpart, d_tryteaquadmult
$sys s_any, 2
$out s_any
$ch$ s_dashes, "-", 70
d_process = 1
d_loop = d_process
dwhi d_loop = 1
$out s_dashes
$out "1. 5TP39= 39,713,433,671"
$out "2. 5TP39= 1,943,372,747,435,261"
$out "3. 5TP39= 1,943,381,207,047,331"
$out "25. 5TP39= 13,069,672,451,845,151"
$out "99. 5TP39= 99,996,530,453,619,851"
$inp s_number, "enter the first number of a 5TP39"
$ift s_number = "*"
dinc d_loop
dinc d_process
endi
$ift s_number = "1": s_number = "39,713,433,671"
$ift s_number = "2": s_number = "1,943,372,747,435,261"
$ift s_number = "3": s_number = "1,943,381,207,047,331"
$ift s_number = "25": s_number = "13,069,672,451,845,151"
$ift s_number = "99": s_number = "99,996,530,453,619,851"
dift d_process = 1
$out s_number
sg_pass1 = s_number
sub_teaquad_from_string
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
ded$ s_any, d_teaquadpart, 0, 0
$out "d_teaquadpart=" + s_any
ded$ s_any, d_teaquadmult, 0, 0
$out "d_teaquadmult=" + s_any
endi
dift d_process = 1
d_count = 0
d_yes = 1
dsec d_seconds1
'11
dinc d_count
d_tryteaquadpart = d_teaquadpart
d_tryteaquadmult = d_teaquadmult
dg_pass1 = d_tryteaquadpart
dg_pass2 = d_tryteaquadmult
sub_teaquad_to_string
s_trynum = d_count + "=" + " " + sg_pass1
dsec d_seconds2
dfak d_factor, d_tryteaquadpart, d_tryteaquadmult
dsec d_seconds3
dift d_factor = 1
s_out = s_trynum + " is prime"
else
ded$ s_any, d_factor, 0, 0
s_out = s_trynum + " is not prime, " + s_any
dinc d_yes
endi
d_seconds3 = d_seconds3 - d_seconds2
$out s_out + " sec=" + d_seconds3
'13
dinc d_count
d_tryteaquadpart = d_teaquadpart + 2
d_tryteaquadmult = d_teaquadmult
dg_pass1 = d_tryteaquadpart
dg_pass2 = d_tryteaquadmult
sub_teaquad_to_string
s_trynum = d_count + "=" + " " + sg_pass1
dsec d_seconds2
dfak d_factor, d_tryteaquadpart, d_tryteaquadmult
dsec d_seconds3
dift d_factor = 1
s_out = s_trynum + " is prime"
else
ded$ s_any, d_factor, 0, 0
s_out = s_trynum + " is not prime, " + s_any
dinc d_yes
endi
d_seconds3 = d_seconds3 - d_seconds2
$out s_out + " sec=" + d_seconds3
'17
dinc d_count
d_tryteaquadpart = d_teaquadpart + 6
d_tryteaquadmult = d_teaquadmult
dg_pass1 = d_tryteaquadpart
dg_pass2 = d_tryteaquadmult
sub_teaquad_to_string
s_trynum = d_count + "=" + " " + sg_pass1
dsec d_seconds2
dfak d_factor, d_tryteaquadpart, d_tryteaquadmult
dsec d_seconds3
dift d_factor = 1
s_out = s_trynum + " is prime"
else
ded$ s_any, d_factor, 0, 0
s_out = s_trynum + " is not prime, " + s_any
dinc d_yes
endi
d_seconds3 = d_seconds3 - d_seconds2
$out s_out + " sec=" + d_seconds3
'19
dinc d_count
d_tryteaquadpart = d_teaquadpart + 8
d_tryteaquadmult = d_teaquadmult
dg_pass1 = d_tryteaquadpart
dg_pass2 = d_tryteaquadmult
sub_teaquad_to_string
s_trynum = d_count + "=" + " " + sg_pass1
dsec d_seconds2
dfak d_factor, d_tryteaquadpart, d_tryteaquadmult
dsec d_seconds3
dift d_factor = 1
s_out = s_trynum + " is prime"
else
ded$ s_any, d_factor, 0, 0
s_out = s_trynum + " is not prime, " + s_any
dinc d_yes
endi
d_seconds3 = d_seconds3 - d_seconds2
$out s_out + " sec=" + d_seconds3
'29
dinc d_count
d_tryteaquadpart = d_teaquadpart + 18
d_tryteaquadmult = d_teaquadmult
dg_pass1 = d_tryteaquadpart
dg_pass2 = d_tryteaquadmult
sub_teaquad_to_string
s_trynum = d_count + "=" + " " + sg_pass1
dsec d_seconds2
dfak d_factor, d_tryteaquadpart, d_tryteaquadmult
dsec d_seconds3
dift d_factor = 1
s_out = s_trynum + " is prime"
else
ded$ s_any, d_factor, 0, 0
s_out = s_trynum + " is not prime, " + s_any
dinc d_yes
endi
d_seconds3 = d_seconds3 - d_seconds2
$out s_out + " sec=" + d_seconds3
'31
dinc d_count
d_tryteaquadpart = d_teaquadpart + 20
d_tryteaquadmult = d_teaquadmult
dg_pass1 = d_tryteaquadpart
dg_pass2 = d_tryteaquadmult
sub_teaquad_to_string
s_trynum = d_count + "=" + " " + sg_pass1
dsec d_seconds2
dfak d_factor, d_tryteaquadpart, d_tryteaquadmult
dsec d_seconds3
dift d_factor = 1
s_out = s_trynum + " is prime"
else
ded$ s_any, d_factor, 0, 0
s_out = s_trynum + " is not prime, " + s_any
dinc d_yes
endi
d_seconds3 = d_seconds3 - d_seconds2
$out s_out + " sec=" + d_seconds3
'41
dinc d_count
d_tryteaquadpart = d_teaquadpart + 30
d_tryteaquadmult = d_teaquadmult
dg_pass1 = d_tryteaquadpart
dg_pass2 = d_tryteaquadmult
sub_teaquad_to_string
s_trynum = d_count + "=" + " " + sg_pass1
dsec d_seconds2
dfak d_factor, d_tryteaquadpart, d_tryteaquadmult
dsec d_seconds3
dift d_factor = 1
s_out = s_trynum + " is prime"
else
ded$ s_any, d_factor, 0, 0
s_out = s_trynum + " is not prime, " + s_any
dinc d_yes
endi
d_seconds3 = d_seconds3 - d_seconds2
$out s_out + " sec=" + d_seconds3
'43
dinc d_count
d_tryteaquadpart = d_teaquadpart + 32
d_tryteaquadmult = d_teaquadmult
dg_pass1 = d_tryteaquadpart
dg_pass2 = d_tryteaquadmult
sub_teaquad_to_string
s_trynum = d_count + "=" + " " + sg_pass1
dsec d_seconds2
dfak d_factor, d_tryteaquadpart, d_tryteaquadmult
dsec d_seconds3
dift d_factor = 1
s_out = s_trynum + " is prime"
else
ded$ s_any, d_factor, 0, 0
s_out = s_trynum + " is not prime, " + s_any
dinc d_yes
endi
d_seconds3 = d_seconds3 - d_seconds2
$out s_out + " sec=" + d_seconds3
'47
dinc d_count
d_tryteaquadpart = d_teaquadpart + 36
d_tryteaquadmult = d_teaquadmult
dg_pass1 = d_tryteaquadpart
dg_pass2 = d_tryteaquadmult
sub_teaquad_to_string
s_trynum = d_count + "=" + " " + sg_pass1
dsec d_seconds2
dfak d_factor, d_tryteaquadpart, d_tryteaquadmult
dsec d_seconds3
dift d_factor = 1
s_out = s_trynum + " is prime"
else
ded$ s_any, d_factor, 0, 0
s_out = s_trynum + " is not prime, " + s_any
dinc d_yes
endi
d_seconds3 = d_seconds3 - d_seconds2
$out s_out + " sec=" + d_seconds3
'49
dinc d_count
d_tryteaquadpart = d_teaquadpart + 38
d_tryteaquadmult = d_teaquadmult
dg_pass1 = d_tryteaquadpart
dg_pass2 = d_tryteaquadmult
sub_teaquad_to_string
s_trynum = d_count + "=" + " " + sg_pass1
dsec d_seconds2
dfak d_factor, d_tryteaquadpart, d_tryteaquadmult
dsec d_seconds3
dift d_factor = 1
s_out = s_trynum + " is prime"
else
ded$ s_any, d_factor, 0, 0
s_out = s_trynum + " is not prime, " + s_any
dinc d_yes
endi
d_seconds3 = d_seconds3 - d_seconds2
$out s_out + " sec=" + d_seconds3
dsec d_any
d_seconds1 = d_any - d_seconds1
$out s_dashes
dift d_yes = 1
s_any = "yes, 5TP39, number=" + s_number
$app s_any, ", seconds=" + d_seconds1
$out s_any
else
s_any = "not 5TP39, number=" + s_number
$app s_any, ", seconds=" + d_seconds1
$out s_any
endi
$inp s_any, "return"
$ift s_any = "*": dinc d_loop
endi
endw
ends sub_teaquad_5tp39_test_a_number
subr sub_floating_point_accuracy
'updated 2005/03/31, 2005/03/29
vari d_any, s_any, d_dot, s_dot
vari d_loop, d_number, s_number, s_hold
vari d_high, d_delta, d_random, d_totrandom
vari d_count, d_jump
$sys s_any, 2
$out s_any
d_totrandom = 0
d_count = 0
dpow d_jump, 10, 5
dpow d_high, 10, 16
dpow d_delta, 10, 13
d_loop = 1
dwhi d_loop = 1
dran d_random
d_totrandom = d_totrandom + d_random
d_number = d_high - d_delta * d_random + d_high - d_delta
ddec d_delta
d_any = d_number + 1
dift d_any = d_number
dift d_number < d_high: d_high = d_number
endi
dinc d_count
d_any = d_count % d_jump
dift d_any = 0
d_any = d_totrandom / d_count
ded$ s_any, d_count, 0, 0
ded$ s_dot, d_high, 0, 0
s_any = s_any + ". " + s_dot
$app s_any, ", averan=" + d_any
$app s_any, ", random=" + d_random
$out s_any
endi
endw
ends sub_floating_point_accuracy
subr sub_speed
'updated 2005/03/31, 2005/02/26, 2004/12/03
'speed test
vari d_any, s_any, d_dot, s_dot
vari d_time, d_max, d_count
$sys s_any, 2
$out s_any
dsec d_time
'ten million loop
d_max = 1000 * 1000 * 10
d_count = 0
dwhi d_count < d_max
dinc d_count
endw
dsec d_any
d_time = d_any - d_time
ded$ s_any, d_count, 0, 0
$out "loops=" + s_any
$inp s_any, "ten million loop, seconds=" + d_time
ends sub_speed
subr sub_floating_point_test
'updated 2006/07/19, 2002/10/05
vari d_any, s_any, d_dot, s_dot
vari s_out
dpow d_any, 10, 14
d_any = d_any / 3
ded$ s_out, d_any, 0, 0
s_out = "10E14/3=" + s_out
s_any = "error: floating point: "
$lok d_dot, s_out, 1, "."
dift d_dot > 0
ddec d_dot
$cut s_dot, s_out, d_dot, 3
$ift s_dot = "3.3": s_any = "ok: floating point: "
endi
$out s_any + s_out
ends sub_floating_point_test
subr sub_prime_test_using_prime_array
'updated 2006/07/29, 2004/01/24
'test dg_pass1>3 for prime, if prime set dg_pass1 to 1
'use the indexed primes in the decimal array
vari d_number, d_try, d_square, d_mod, d_index
vari d_loop, d_result, d_root
d_number = dg_pass1 \ 1
dabs d_number, d_number
dpow d_root, d_number, 0.5
d_index = 1
d_result = 1
d_try = 3
d_loop = 1
dwhi d_loop = 1
dift d_index <= 2000
itod d_try, d_index
dinc d_index
else
d_try = d_try + 2
endi
dift d_try > d_root
dinc d_loop
else
d_mod = d_number % d_try
dift d_mod = 0
d_result = d_try
dinc d_loop
endi
endi
endw
dg_pass1 = d_result
ends sub_prime_test_using_prime_array
subr sub_primes_build_array
'updated 2004/01/24
'put 2000 primes into the array by index
vari s_any, d_any
vari d_number, d_result, d_index, d_prime
vari d_time1, d_time2
dsec d_time1
$out "building array of 2000 primes starting at 3 in 1"
d_number = 3
d_index = 1
dwhi d_index <= 2000
'test d_prime to see if it is prime
dg_pass1 = d_number
sub_prime_test_simple
d_result = dg_pass1
dift d_result = 1
d_prime = d_number
dtoi d_index, d_number
dinc d_index
endi
d_number = d_number + 2
endw
$out "array built of 2000 primes from 3 to " + d_prime
dsec d_time2
d_time2 = d_time2 - d_time1
$out "seconds = " + d_time2
ends sub_primes_build_array
subr sub_prime_test_one_number
'updated 2006/08/04, 2006/07/29, 2004/01/01
'test individual numbers for primeness
vari s_any, d_any, s_dot, d_dot, s_out
vari s_pick, d_pick, s_num1, s_num2
vari d_number, d_loop, d_good, s_xyzedited
vari d_sec1, d_sec2, s_dashes, d_type
vari d_tealines
$out "1=use teapro command dfac"
$out "2=use prime array"
$out "3=use simple prime test"
$inp s_any, "pick"
d_type = 1
$isd d_any, s_any
dift d_any = 1: $tod d_type, s_any
dift d_type = 2: sub_primes_build_array
$ch$ s_dashes, "-", 70
d_loop = 1
dwhi d_loop = 1
ded$ s_any, dg_xvalue, 0, 0
s_xyzedited = "x=" + s_any
ded$ s_any, dg_yvalue, 0, 0
$app s_xyzedited, ", y=" + s_any
ded$ s_any, dg_zvalue, 0, 0
$app s_xyzedited, ", z=" + s_any
$out s_dashes
$out " 1. 1,000,000,007"
$out " 2. 1,000,000,000,039"
$out " 3. 1,346,294,310,749"
$out " 4. 7,177,162,611,713"
$out " 5. 13,829,048,559,701"
$out " 6. 90,874,329,411,493"
$out " 7. 100,000,380,000,361 by 10,000,019"
$out " 8. 570,800,107,412,201"
$out " 9. 999,999,999,999,947"
$out "10. 999,999,999,999,989"
$out "11. 2,000,274,172,370,231"
$out "12. 2,276,000,138,167,961"
$out "13. 3,000,058,045,624,691"
$out "14. 6,000,993,394,600,871"
$out "15. 9,002,235,408,655,631"
$out "16. 9,007,196,099,250,001 by 94,906,249"
$out s_xyzedited
$out "enter a number above or any number"
$inp s_pick, "enter a number to test for primeness, * to end"
$ift s_pick = "*": dinc d_loop
$tup s_pick, s_pick
d_pick = 0
$isd d_any, s_pick
dift d_any = 1: $tod d_pick, s_pick
dift d_pick = 1: s_pick = "1,000,000,007"
dift d_pick = 2: s_pick = "1,000,000,000,039"
dift d_pick = 3: s_pick = "1,346,294,310,749"
dift d_pick = 4: s_pick = "7,177,162,611,713"
dift d_pick = 5: s_pick = "13,829,048,559,701"
dift d_pick = 6: s_pick = "90,874,329,411,493"
dift d_pick = 7: s_pick = "100,000,380,000,361"
dift d_pick = 8: s_pick = "570,800,107,412,201"
dift d_pick = 9: s_pick = "999,999,999,999,947"
dift d_pick = 10: s_pick = "999,999,999,999,989"
dift d_pick = 11: s_pick = "2,000,274,172,370,231"
dift d_pick = 12: s_pick = "2,276,000,138,167,961"
dift d_pick = 13: s_pick = "3,000,058,045,624,691"
dift d_pick = 14: s_pick = "6,000,993,394,600,871"
dift d_pick = 15: s_pick = "9,002,235,408,655,631"
dift d_pick = 16: s_pick = "9,007,196,099,250,001"
$ift s_pick = "X": s_pick = dg_xvalue
$ift s_pick = "Y": s_pick = dg_yvalue
$ift s_pick = "Z": s_pick = dg_zvalue
$isd d_any, s_pick
dift d_any = 1
$out s_dashes
$tod d_number, s_pick
ded$ s_num1, d_number, 0, 0
$out s_num1
'save total lines
dsys d_tealines, 2
dsec d_sec1
dift d_type = 1
$out "using dfac"
dfac d_good, d_number
endi
dift d_type = 2
$out "using prime array"
dg_pass1 = d_number
sub_prime_test_using_prime_array
d_good = dg_pass1
endi
dift d_type = 3
$out "using simple"
dg_pass1 = d_number
sub_prime_test_simple
d_good = dg_pass1
endi
dsec d_sec2
'get total lines
dsys d_any, 2
d_tealines = d_any - d_tealines
ded$ s_any, d_tealines, 0, 0
$out "total lines=" + s_any
ded$ s_num1, d_number, 0, 0
ded$ s_num2, d_good, 0, 0
dift d_good = 1
$out s_num1 + " is prime"
else
$out s_num1 + " is divisible by " + s_num2
endi
d_sec1 = d_sec2 - d_sec1
$out "seconds = " + d_sec1
$inp s_any, "return to continue"
$ift s_any = "*": dinc d_loop
endi
endw
ends sub_prime_test_one_number
subr sub_prime_numbers
'updated 2006/04/10, 2005/02/12, 2005/02/01, 2004/12/03
'find prime numbers
vari d_any, s_any, d_dot, s_dot, s_out
vari d_nowprime, s_nowprime, d_oldprime, d_process
vari d_begnumber, d_tofindct, d_count, d_stopnumber
vari d_ctdiff, d_nowdiff, d_maxdiff, d_thisdiff
vari d_yesprime, d_mod, d_yesdfac, d_yesbiggernumbers
vari d_average, d_avetotal, d_shownumber, d_shownotprime
vari d_showonlynewdiff, d_diffprime
vari d_time1, d_time2, d_loop, d_totprimes
vari d_tellseconds, d_seconds, d_yesfileout, s_fileout
d_process = 1
dift d_process = 1
'get an output file name
dran d_any
dpow d_dot, 99999, 2
d_any = d_dot * d_any \ 1
s_fileout = "P" + d_any
$cut s_fileout, s_fileout, 1, 8
$app s_fileout, ".txt"
$inp s_any, "1 = use teapro command DFAC"
$ift s_any = "*": dinc d_process
d_yesdfac = 2
$ift s_any = "1": d_yesdfac = 1
endi
dift d_process = 1
$inp s_any, "1 = output results to file = " + s_fileout
$ift s_any = "*": dinc d_process
d_yesfileout = 2
$ift s_any = "1": d_yesfileout = 1
endi
dift d_process = 1
$inp s_any, "1 = increase numbers otherwise decrease"
$ift s_any = "*": dinc d_process
d_yesbiggernumbers = 2
$ift s_any = "1": d_yesbiggernumbers = 1
endi
dift d_process = 1
$out "finding prime numbers"
$out "the number to begin with, return=1"
s_dot = "12345678901234567890"
$inp s_any, s_dot
$ift s_any = "*": dinc d_process
$isd d_any, s_any
d_begnumber = 1
dift d_any = 1: $tod d_begnumber, s_any
endi
dift d_process = 1
$out "enter number to stop at, return=1E16 or 1"
$inp s_any, s_dot
$ift s_any = "*": dinc d_process
$isd d_any, s_any
dift d_yesbiggernumbers = 1
dpow d_stopnumber, 10, 16
else
d_stopnumber = 1
endi
dift d_any = 1: $tod d_stopnumber, s_any
ded$ s_any, d_stopnumber, 0, 0
$out "stop number=" + s_any
'add 1 if number is not odd
d_any = d_begnumber % 2
$out d_begnumber + " % 2 = " + d_any
dift d_any = 0: dinc d_begnumber
ded$ s_any, d_begnumber, 0, 0
$out "starting with=" + s_any
d_diffprime = d_begnumber
endi
dift d_process = 1
$inp s_any, "enter number to find, return=1E16"
$ift s_any = "*": dinc d_process
$isd d_any, s_any
dpow d_tofindct, 10, 16
dift d_any = 1: $tod d_tofindct, s_any
ded$ s_any, d_tofindct, 0, 0
$out "number to find=" + s_any
endi
dift d_process = 1
$inp s_any, "1=show only greater differences"
$ift s_any = "*": dinc d_process
d_showonlynewdiff = 2
$ift s_any = "1": d_showonlynewdiff = 1
d_shownumber = 2
endi
dift d_process = 1
$inp s_any, "1=show number being considered"
$ift s_any = "*": dinc d_process
$ift s_any = "1": d_shownumber = 1
endi
dift d_process = 1
d_shownotprime = 2
$inp s_any, "1=show not primes and divisors"
$ift s_any = "*": dinc d_process
$ift s_any = "1": d_shownotprime = 1
'build the decimal array to hold the first 2000 primes
dift d_yesdfac <> 1: sub_primes_build_array
endi
'initialize count
d_count = 0
'previous prime
dsec d_time1
d_totprimes = 0
d_oldprime = 0
d_nowdiff = 1
d_maxdiff = 0
d_nowprime = d_begnumber
d_ctdiff = 0
d_loop = d_process
'go until we have found count nfind
dwhi d_loop = 1
dift d_shownumber = 1
ded$ s_any, d_nowprime, 0, 0
$sho s_any
endi
dift d_yesdfac = 1
dfac d_yesprime, d_nowprime
else
'is d_nowprime a prime
dg_pass1 = d_nowprime
sub_prime_test_using_prime_array
d_yesprime = dg_pass1
endi
dift d_shownotprime = 1
dift d_yesprime > 1
ded$ s_any, d_nowprime, 0, 0
ded$ s_dot, d_yesprime, 0, 0
$out "not=" + s_any + ", divisor=" + s_dot
endi
endi
'if d_yesprime is 1 then we have a prime
dift d_yesprime = 1
d_totprimes = d_totprimes + d_nowprime
ded$ s_nowprime, d_nowprime, 0, 0
'previous prime find difference
dift d_oldprime > 0
d_nowdiff = d_nowprime - d_oldprime
dabs d_nowdiff, d_nowdiff
dift d_nowdiff > d_maxdiff
d_diffprime = d_oldprime
d_maxdiff = d_nowdiff
dift d_showonlynewdiff = 1
s_out = d_count + ". " + s_nowprime
ded$ s_any, d_maxdiff, 0, 0
$app s_out, ", maximum gap=" + s_any
$out s_out
endi
endi
'averaging of the difference
dinc d_ctdiff
d_thisdiff = d_nowdiff
d_avetotal = d_avetotal + d_thisdiff
d_average = d_avetotal / d_ctdiff
drou d_average, d_average
endi
'increment count d_count
dinc d_count
dift d_showonlynewdiff <> 1
s_out = d_count + ". " + s_nowprime
dto$ s_any, d_thisdiff, 3, 0
$app s_out, " diff=" + s_any
$app s_out, " max=" + d_maxdiff
ded$ s_any, d_diffprime, 0, 0
$app s_out, " at=" + s_any + " ave="
$app s_out, d_average
$out s_out
dift d_yesfileout = 1
fapp d_any, s_fileout, s_out
dbad d_any = 0
endi
else
'd_showonlynewdiff = 1 here
dsec d_time2
d_any = d_time2 - d_time1
dift d_any > 5
d_time1 = d_time2
$sho "finding primes=" + s_nowprime
endi
endi
'save for previous prime
d_oldprime = d_nowprime
endi
'increment by two for the next try at finding a prime
dift d_yesbiggernumbers = 1
d_nowprime = d_nowprime + 2
dift d_nowprime > d_stopnumber: dinc d_loop
else
d_nowprime = d_nowprime - 2
dift d_nowprime < d_stopnumber: dinc d_loop
endi
dift d_count >= d_tofindct: dinc d_loop
endw
dsec d_time2
d_any = d_time2 - d_time1
$out "seconds=" + d_any
ded$ s_any, d_diffprime, 0, 0
$out "max diff=" + d_maxdiff + ", at=" + s_any
ded$ s_any, d_totprimes, 0, 0
$out "total of primes=" + s_any
$inp s_any, "return"
ends sub_prime_numbers
subr sub_teaquad_prime_quads
'updated 2007/03/06, 2004/10/21
'find prime number quads
vari d_any, s_any, d_dot, s_dot, s_out
vari d_good, s_fileout, d_tofile, d_process
vari d_teaquadpart, d_teaquadmult
vari d_tofindct, s_input, d_factor, s_number
vari d_count, d_loop, s_date
d_process = 1
dift d_process = 1
s_fileout = "primquad.txt"
d_tofile = 2
$inp s_any, "1=output to file=" + s_fileout
$ift s_any = "*": dinc d_process
$ift s_any = "1": d_tofile = 1
endi
dift d_process = 1
$out "finding prime number quads"
$out "enter the number to begin with"
$inp s_input, "123456789012345678901"
$ift s_input = "*": dinc d_process
endi
dift d_process = 1
dpow d_tofindct, 10, 5
$inp s_any, "How many, default=99999"
$ift s_any = "*": dinc d_process
$isd d_any, s_any
dift d_any = 1 :$tod d_tofindct, s_any
endi
dift d_process = 1
sg_pass1 = s_input
sub_teaquad_from_string
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
endi
dift d_process = 1
'make sure number ends in 1
d_teaquadpart = d_teaquadpart \ 10 * 10 + 1
'do we need to adjust so that (num-11)%30=0
dg_pass1 = d_teaquadpart - 11
dg_pass2 = d_teaquadmult
dg_pass3 = 30
sub_teaquad_mod_op
d_dot = dg_pass1
d_teaquadpart = d_teaquadpart - d_dot
ded$ s_any, d_teaquadpart, 0, 0
$out "d_teaquadpart=" + s_any
ded$ s_any, d_teaquadmult, 0, 0
$out "d_teaquadmult=" + s_any
endi
d_count = 0
d_loop = d_process
dwhi d_loop = 1
dfak d_factor, d_teaquadpart, d_teaquadmult
d_any = d_teaquadpart + 2
dift d_factor = 1: dfak d_factor, d_any, d_teaquadmult
d_any = d_teaquadpart + 6
dift d_factor = 1: dfak d_factor, d_any, d_teaquadmult
d_any = d_teaquadpart + 8
dift d_factor = 1: dfak d_factor, d_any, d_teaquadmult
dift d_factor = 1
'we have a new prime quad
dinc d_count
dg_pass1 = d_teaquadpart
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_number = sg_pass1
$dat s_date
$cut s_date, s_date, 1, 20
s_out = d_count + "." + " " + s_number
$app s_out, " " + s_date
$out s_out
dift d_tofile = 1
fapp d_any, s_fileout, s_out
dbad d_any = 0
endi
endi
d_teaquadpart = d_teaquadpart + 30
dift d_count >= d_tofindct: dinc d_loop
endw
$inp s_any, "return"
ends sub_teaquad_prime_quads
subr sub_teaquad_mod_op
'updated 2007/03/06
vari d_any, d_dot
vari d_teaquadpart, d_teaquadmult, d_teaquadone
vari d_modulus, d_divisor
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
d_divisor = dg_pass3
dpow d_teaquadone, 10, 15
d_any = d_teaquadpart % d_divisor
d_dot = d_teaquadone % d_divisor * d_teaquadmult
d_modulus = d_any + d_dot % d_divisor
dg_pass1 = d_modulus
ends sub_teaquad_mod_op
subr sub_big_pnq30s
'updated 2004/10/21
'find big prime quads
vari d_any, s_any, d_dot, s_dot, s_out
vari d_good, d_fileout, d_tofindct
vari d_begin, d_count, d_loop, d_minimumtoshow, d_ynmindecline
vari d_quadroot, s_quadroot, d_quaddiff, d_primetest
vari d_quadold, s_quadold, d_quadnew, s_quadnew
vari s_num1, s_num2, s_num3, s_num4
d_fileout = 2
$inp s_any, "1 = output to file = " + sg_fileout
$ift s_any = "1": d_fileout = 1
d_ynmindecline = 2
dpow d_minimumtoshow, 10, 9
$inp s_any, "enter minimum quad difference to show, 0=declining"
$isd d_any, s_any
dift d_any = 1: $tod d_minimumtoshow, s_any
dift d_minimumtoshow = 0
d_ynmindecline = 1
dpow d_minimumtoshow, 10, 20
endi
$out "finding prime number quads"
$out "enter the number to begin with"
$inp s_any, "12345678901234567890123456789"
$tod d_begin, s_any
'make sure number ends in 1
d_begin = d_begin \ 10 * 10 + 1
ded$ s_any, d_begin, 0, 0
$out "starting with=" + s_any
dpow d_tofindct, 10, 9
$inp s_any, "How many to find, hit return for a billion"
$isd d_any, s_any
dift d_any = 1: $tod d_tofindct, s_any
ded$ s_any, d_tofindct, 0, 0
$out "number to find=" + s_any
'output beginning numbers to file
ded$ s_num1, d_begin, 0, 0
ded$ s_num2, d_tofindct, 0, 0
$dat s_num3
s_out = s_num3 + ", begin = " + s_num1 + " for " + s_num2
dift d_fileout = 1
fapp d_any, sg_fileout, s_out
dbad d_any = 0
endi
d_count = 0
d_quaddiff = 0
'old and new quad
d_quadold = 0
d_quadnew = 0
d_primetest = d_begin
d_loop = 1
'go until we have found count d_tofindct
dwhi d_loop = 1
d_good = 2
dfac d_good, d_primetest
dift d_good = 1
'is d_primetest + 2 a prime
d_any = d_primetest + 2
dfac d_good, d_any
dift d_good = 1
ded$ s_num1, d_primetest, 0, 0
ded$ s_num2, d_quaddiff, 0, 0
s_out = "prime twin=" + s_num1
$app s_out, ", last quad=" + s_quadnew
$app s_out, ", diff=" + s_num2
$sho s_out
'is d_primetest + 6 a prime
d_any = d_primetest + 6
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 8 a prime
d_any = d_primetest + 8
dfac d_good, d_any
endi
endi
endi
dift d_good = 1
'we have a new prime quad
dinc d_count
d_quadold = d_quadnew
d_quadnew = d_primetest
ded$ s_quadnew, d_quadnew, 0, 0
'get the quad root
dpow d_any, d_quadnew, 0.5
d_quadroot = d_any \ 1
ded$ s_quadroot, d_quadroot, 0, 0
'last difference
d_quaddiff = d_quadnew - d_quadold
dift d_quaddiff < 0: d_quaddiff = - d_quaddiff
dift d_count = 1: dpow d_quaddiff, 10, 16
dift d_quaddiff <= d_minimumtoshow
dift d_ynmindecline = 1: d_minimumtoshow = d_quaddiff
ded$ s_num1, d_quaddiff, 0, 0
ded$ s_num2, d_quadold, 0, 0
d_any = d_quadold + 8
ded$ s_num3, d_any, 0, 0
'we are show the just found quad
s_out = d_count + ". " + s_num1 + ", "
$app s_out, s_num2 + " / " + s_num3
dift d_fileout = 1: $app s_out, ", " + sg_fileout
$out s_out
endi
'output to file if small
d_any = d_quadroot / 16
dift d_quaddiff < d_any
d_dot = d_quadold
ded$ s_num1, d_quaddiff, 0, 0
ded$ s_num2, d_dot, 0, 0
d_any = d_dot + 8
ded$ s_num3, d_any, 0, 0
'build up the record
$dat s_any
s_out = d_count + ". " + s_num1 + " at " + s_num2
$app s_out, " / " + s_num3 + " " + s_any
dift d_fileout = 1
fapp d_any, sg_fileout, s_out
dbad d_any = 0
endi
endi
endi
'increment by 10 or 30 for the next try at finding a quad prime
dift d_count < 2
d_primetest = d_primetest + 10
else
d_primetest = d_primetest + 30
endi
dift d_count >= d_tofindct: dinc d_loop
endw
$inp s_any, "return"
ends sub_big_pnq30s
subr sub_pnq30_by_210
'updated 2004/10/21
'find pnq30s by jumping 210
vari d_any, s_any, d_dot, s_dot, s_out
vari d_good, d_fileout, s_date, s_hournew, s_hourold
vari d_begin, d_count, d_loop, d_delta
vari d_primetest, d_first
vari d_perhrpnq30, s_perhr
$rep sg_fileout, 1, "Q"
d_fileout = 2
$inp s_any, "1 = output to file = " + sg_fileout
$ift s_any = "1": d_fileout = 1
d_delta = 210
$inp s_any, "1 = decreasing numbers"
$ift s_any = "1": d_delta = - 210
$out "finding PNQ30s by 210"
$out "enter the number to begin with"
d_begin = 1
$inp s_any, "12345678901234567890123456789"
$isd d_any, s_any
dift d_any = 1: $tod d_begin, s_any
'is d_begin of the form 210 * n + d_first where n is an integer
'find n into d_any
$tod d_first, "1006301"
d_any = d_begin - d_first \ 210
ded$ s_any, d_any, 0, 0
$out "n=" + s_any
'find the place to begin
d_begin = d_any * 210 + d_first
'output beginning numbers to file
$dat s_date
ded$ s_any, d_begin, 0, 0
s_out = "begin = " + s_any + " " + s_date
$out s_out
dift d_fileout = 1
fapp d_any, sg_fileout, s_out
dbad d_any = 0
endi
s_hourold = "x"
d_perhrpnq30 = 0
d_count = 0
d_primetest = d_begin
d_loop = 1
'go until we stop
dwhi d_loop = 1
dfac d_good, d_primetest
dift d_good = 1
'is d_primetest + 2 a prime
d_any = d_primetest + 2
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 6 a prime
d_any = d_primetest + 6
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 8 a prime
d_any = d_primetest + 8
dfac d_good, d_any
dift d_good = 1
'we have a prime quadruplet
'12345678901234567890123456789012345
'17-DEC-2002 03:56:22 20021217035622
$dat s_date
'get the hour for below
$cut s_hournew, s_date, 13, 2
$ift s_hournew <> s_hourold
'get perhr change
d_any = d_primetest - d_perhrpnq30
dabs d_any, d_any
ded$ s_perhr, d_any, 0, 0
d_perhrpnq30 = d_primetest
endi
$cut s_date, s_date, 1, 20
ded$ s_any, d_primetest, 0, 0
s_out = "quad=" + s_any
$app s_out, " " + s_date
$app s_out, ", pnq30ct=" + d_count
$app s_out, ", perhr=" + s_perhr
$ift s_hournew <> s_hourold
$out s_out
s_hourold = s_hournew
dift d_fileout = 1
fapp d_any, sg_fileout, s_out
dbad d_any = 0
endi
else
$sho s_out
endi
'is d_primetest + 30 a prime
d_any = d_primetest + 30
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 32 a prime
d_any = d_primetest + 32
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 36 a prime
d_any = d_primetest + 36
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 38 a prime
d_any = d_primetest + 38
dfac d_good, d_any
dift d_good = 1
'we have a pnq30
dinc d_count
ded$ s_dot, d_primetest, 0, 0
'show the just found pnq30
$dat s_date
$cut s_date, s_date, 1, 20
s_out = "] PNQ30= " + s_dot + " " + s_date
$out s_out
'build up the record
dift d_fileout = 1
fapp d_any, sg_fileout, s_out
dbad d_any = 0
endi
endi
endi
endi
endi
endi
endi
endi
endi
'change by 210
d_primetest = d_primetest + d_delta
endw
ends sub_pnq30_by_210
subr sub_pnq30_by_pivcom
'updated 2004/10/21
'find pnq30s by pivcom
vari d_any, s_any, d_dot, s_dot, s_out
vari d_good, d_fileout, s_date, s_hournew, s_hourold
vari d_begin, d_count, d_loop, d_delta
vari d_primetest, d_first
vari d_perhrpnq30, s_perhr
vari d_ctpivcom, d_pivcom, d_modulus
$rep sg_fileout, 1, "P"
d_fileout = 2
$inp s_any, "1 = output to file = " + sg_fileout
$ift s_any = "1": d_fileout = 1
d_delta = 1
$inp s_any, "1 = decreasing numbers"
$ift s_any = "1": d_delta = - 1
$out "finding PNQ30s by PIVCOM"
$out "enter the number to begin with"
d_begin = 1
$inp s_any, "12345678901234567890123456789"
$isd d_any, s_any
dift d_any = 1: $tod d_begin, s_any
'find d_pivcom and d_ctpivcom for d_begin
d_ctpivcom = d_begin \ 210
dift d_ctpivcom < 1: d_ctpivcom = 1
$out "d_ctpivcom=" + d_ctpivcom
'find the place to begin
d_begin = d_ctpivcom * 210 - 19
'output beginning numbers to file
$dat s_date
ded$ s_any, d_begin, 0, 0
s_out = "ctpivcom=" + d_ctpivcom
$app s_out, " begin=" + s_any + " " + s_date
$out s_out
dift d_fileout = 1
fapp d_any, sg_fileout, s_out
dbad d_any = 0
endi
s_hourold = "x"
d_perhrpnq30 = 0
d_count = 0
d_primetest = d_begin
d_loop = 1
'go until we stop
dwhi d_loop = 1
'for d_ctpivcom to be good the following must be
d_modulus = d_ctpivcom % 11 % 3 - 1
dift d_modulus = 0: d_modulus = d_ctpivcom % 13
dift d_modulus > 0: d_modulus = d_ctpivcom % 17
dift d_modulus > 0: d_modulus = d_ctpivcom % 19
dift d_modulus > 0
d_primetest = d_ctpivcom * 210 - 19
dfac d_good, d_primetest
else
dinc d_good
endi
dift d_good = 1
'is d_primetest + 2 a prime
d_any = d_primetest + 2
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 6 a prime
d_any = d_primetest + 6
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 8 a prime
d_any = d_primetest + 8
dfac d_good, d_any
dift d_good = 1
'we have a prime quadruplet
'12345678901234567890123456789012345
'17-DEC-2002 03:56:22 20021217035622
$dat s_date
'get the hour for below
$cut s_hournew, s_date, 13, 2
$ift s_hournew <> s_hourold
'get perhr change
d_any = d_primetest - d_perhrpnq30
dabs d_any, d_any
ded$ s_perhr, d_any, 0, 0
d_perhrpnq30 = d_primetest
endi
$cut s_date, s_date, 1, 20
ded$ s_any, d_primetest, 0, 0
s_out = "quad=" + s_any
$app s_out, " " + s_date
$app s_out, ", pnq30ct=" + d_count
$app s_out, ", perhr=" + s_perhr
$ift s_hournew <> s_hourold
$out s_out
s_hourold = s_hournew
dift d_fileout = 1
fapp d_any, sg_fileout, s_out
dbad d_any = 0
endi
else
$sho s_out
endi
'is d_primetest + 30 a prime
d_any = d_primetest + 30
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 32 a prime
d_any = d_primetest + 32
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 36 a prime
d_any = d_primetest + 36
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 38 a prime
d_any = d_primetest + 38
dfac d_good, d_any
dift d_good = 1
'we have a pnq30
dinc d_count
ded$ s_dot, d_primetest, 0, 0
'show the just found pnq30
$dat s_date
$cut s_date, s_date, 1, 20
s_out = "] PNQ30= " + s_dot + " " + s_date
$out s_out
'build up the record
dift d_fileout = 1
fapp d_any, sg_fileout, s_out
dbad d_any = 0
endi
endi
endi
endi
endi
endi
endi
endi
endi
'increment the count pivcom d_ctpivcom
d_ctpivcom = d_ctpivcom + d_delta
endw
ends sub_pnq30_by_pivcom
subr sub_pnq30_by_modulus
'updated 2005/10/23, 2005/10/22, 2005/10/19, 2004/10/21
'find pnq30s by modulus
vari d_any, s_any, d_dot, s_dot, s_out
vari d_good, d_fileout, s_date, s_hournew, s_hourold
vari d_begin, d_loop, d_which
vari s_tfile, s_pfile, d_filebyte, s_record
vari d_primetest, s_primetest, d_first
vari d_perhrpnq30, s_perhr
vari d_pivcom, s_pivcom, d_modulus, s_5tp39
vari d_number, d_index, d_around, d_divisor
'd_which=1 for enter beginning number
'd_which=2 for begin again get number from file
d_which = dg_pass1
s_tfile = "tpnq30.txt"
s_pfile = "ppnq30.txt"
dift d_which = 1
'enter beginning number
$out "beginning number"
$inp s_any, "123456789012345678901"
d_begin = 99999
$isd d_any, s_any
dift d_any = 1: $tod d_begin, s_any
endi
dift d_which = 2
'get beginning number from file
d_begin = 0
d_filebyte = 1
d_loop = 1
dwhi d_loop = 1
fsip s_record, s_tfile, d_filebyte
dift d_filebyte = 0
dinc d_loop
else
$lok d_any, s_record, 1, " "
$cut s_any, s_record, 1, d_any
$trb s_any, s_any
$isd d_any, s_any
dift d_any = 1
$tod d_begin, s_any
$out s_any
else
$out s_record
endi
endi
endw
endi
'the term PIVCOM was invented by Roger Hargrave in 2002
'find d_pivcom for d_begin
d_pivcom = d_begin \ 210 * 210
dift d_pivcom < 210: d_pivcom = 210
ded$ s_pivcom, d_pivcom, 0, 0
$out "d_pivcom=" + s_pivcom
'find the place to begin
d_begin = d_pivcom - 19
'output beginning numbers to file
$dat s_date
$cut s_date, s_date, 1, 20
s_out = "pivcom=" + s_pivcom
ded$ s_any, d_begin, 0, 0
$app s_out, " begin=" + s_any + " " + s_date
$out s_out
fapp d_any, s_tfile, s_out
dbad d_any = 0
'put primes in array
d_number = 11
d_index = 1
dwhi d_index <= 2000
d_modulus = 99999
dwhi d_modulus > 1
dfac d_modulus, d_number
dift d_modulus > 1: d_number = d_number + 2
endw
dtoi d_index, d_number
d_number = d_number + 2
dinc d_index
endw
s_hourold = "x"
d_perhrpnq30 = 0
d_primetest = d_begin
d_loop = 1
'go until we stop
dwhi d_loop = 1
d_number = d_pivcom + 19
d_index = 1
d_around = 1
dwhi d_around = 1
itod d_divisor, d_index
d_modulus = d_number % d_divisor
dift d_modulus = 0: dinc d_around
dift d_modulus = 2: dinc d_around
dift d_modulus = 6: dinc d_around
dift d_modulus = 8: dinc d_around
dift d_modulus = 30: dinc d_around
dift d_modulus = 32: dinc d_around
dift d_modulus = 36: dinc d_around
dift d_modulus = 38: dinc d_around
dinc d_index
dift d_index > 2000: d_around = 99999
endw
dift d_around = 99999
d_primetest = d_pivcom - 19
dfac d_good, d_primetest
else
dinc d_good
endi
dift d_good = 1
'we have a prime
'12345678901234567890123456789012345
'17-DEC-2002 03:56:22 20021217035622
$dat s_date
'get the hour for below
$cut s_hournew, s_date, 13, 2
$ift s_hournew <> s_hourold
'get perhr change
d_any = d_primetest - d_perhrpnq30
dabs d_any, d_any
ded$ s_perhr, d_any, 0, 0
s_perhr = " perhr=" + s_perhr
d_perhrpnq30 = d_primetest
endi
$cut s_date, s_date, 1, 20
ded$ s_any, d_primetest, 0, 0
s_out = s_any + " " + s_date
$ift s_hournew <> s_hourold
$app s_out, s_perhr
s_hourold = s_hournew
fapp d_any, s_tfile, s_out
dbad d_any = 0
$out s_out
else
$sho s_out
endi
'is d_primetest + 2 a prime
d_any = d_primetest + 2
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 6 a prime
d_any = d_primetest + 6
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 8 a prime
d_any = d_primetest + 8
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 30 a prime
d_any = d_primetest + 30
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 32 a prime
d_any = d_primetest + 32
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 36 a prime
d_any = d_primetest + 36
dfac d_good, d_any
dift d_good = 1
'is d_primetest + 38 a prime
d_any = d_primetest + 38
dfac d_good, d_any
dift d_good = 1
'we have a pnq30
'do we have a 5TP39
s_5tp39 = sg_nothing
d_any = d_primetest + 18
dfac d_dot, d_any
dift d_dot = 1
d_any = d_primetest + 20
dfac d_dot, d_any
dift d_dot = 1: s_5tp39 = " 5TP39"
endi
ded$ s_primetest, d_primetest, 0, 0
'show the just found pnq30
$dat s_date
$cut s_date, s_date, 1, 20
s_out = "] 000:PNQ30= "
$app s_out, s_primetest
$app s_out, " " + s_date
$app s_out, s_5tp39
$out s_out + s_perhr
fapp d_any, s_tfile, s_out
dbad d_any = 0
fapp d_any, s_tfile, s_primetest
dbad d_any = 0
fapp d_any, s_pfile, s_out
dbad d_any = 0
endi
endi
endi
endi
endi
endi
endi
endi
'increment the pivcom d_pivcom
d_pivcom = d_pivcom + 210
endw
ends sub_pnq30_by_modulus
subr sub_getgaps_begin_again
'updated 2004/10/21
'get gaps begin again
vari d_any, s_any, d_dot, s_dot, s_out
vari d_oldgap, d_nowgap, d_maxgap, s_date
vari s_fileout, d_filebyte, d_loop, s_record
vari d_nowprime, s_nowprime
vari d_oldprime, s_oldprime, d_yesprime
vari d_time1, d_time2, d_time3, d_timeprime, s_timerate
s_fileout = "gaps01.txt"
d_oldprime = 3
d_maxgap = 0
d_oldgap = 0
d_filebyte = 1
d_loop = 1
$inp s_any, "enter getgaps beginning number or return"
$isd d_any, s_any
dift d_any = 1
$tod d_oldprime, s_any
dinc d_loop
endi
dwhi d_loop = 1
'find the last number in the file to begin with
fsip s_record, s_fileout, d_filebyte
dift d_filebyte > 0
$out s_record
'get d_maxgap
$lok d_dot, s_record, 1, "max="
dift d_dot > 0
d_dot = d_dot + 4
$cut s_dot, s_record, d_dot, 9999
$lok d_dot, s_dot, 1, " "
dift d_dot > 0
$cut s_dot, s_dot, 1, d_dot
$isd d_dot, s_dot
dift d_dot = 1: $tod d_maxgap, s_dot
endi
endi
'get d_oldgap
$lok d_dot, s_record, 1, "gap="
dift d_dot > 0
d_dot = d_dot + 4
$cut s_dot, s_record, d_dot, 9999
$lok d_dot, s_dot, 1, " "
dift d_dot > 0
$cut s_dot, s_dot, 1, d_dot
$isd d_dot, s_dot
dift d_dot = 1: $tod d_oldgap, s_dot
endi
endi
'get d_oldprime
$lok d_dot, s_record, 1, "prime="
dift d_dot > 0
d_dot = d_dot + 6
$cut s_dot, s_record, d_dot, 9999
$trb s_dot, s_dot
$app s_dot, " "
$lok d_dot, s_dot, 1, " "
$cut s_dot, s_dot, 1, d_dot
$isd d_any, s_dot
dift d_any = 1: $tod d_oldprime, s_dot
endi
else
dinc d_loop
endi
endw
'is d_oldprime even
dabs d_oldprime, d_oldprime
d_any = d_oldprime % 2
dift d_any = 0: ddec d_oldprime
ded$ s_oldprime, d_oldprime, 0, 0
s_out = "max=" + d_maxgap
$app s_out, " gap=" + d_oldgap
$app s_out, " begin=" + s_oldprime
$out s_out
fapp d_any, s_fileout, s_out
dbad d_any = 0
d_nowprime = d_oldprime + 2
d_timeprime = d_oldprime
dsec d_time1
d_time3 = d_time1 + 60
'go until we stop
dwhi 1 = 1
dfac d_yesprime, d_nowprime
dift d_yesprime = 1
dsec d_time2
dift d_time2 > d_time3
ded$ s_nowprime, d_nowprime, 0, 0
d_any = d_time2 - d_time1
d_any = d_nowprime - d_timeprime / d_any * 3600
ded$ s_any, d_any, 0, 0
s_timerate = " hr=" + s_any
s_out = "prime=" + s_nowprime
$app s_out, " max=" + d_maxgap
$app s_out, s_timerate
$sho s_out
'show progress every 60 seconds
d_timeprime = d_nowprime
d_time3 = d_time2 + 60
d_time1 = d_time2
endi
'we have a new d_nowprime
d_nowgap = d_nowprime - d_oldprime
dift d_nowgap > d_maxgap: d_maxgap = d_nowgap
dift d_nowgap > 200
ded$ s_oldprime, d_oldprime, 0, 0
$dat s_date
$cut s_date, s_date, 1, 20
s_out = "max=" + d_maxgap
$app s_out, " gap=" + d_nowgap
$app s_out, " prime= " + s_oldprime
$app s_out, " " + s_date
$app s_out, s_timerate
$out s_out
fapp d_any, s_fileout, s_out
dbad d_any = 0
endi
d_oldprime = d_nowprime
endi
'increment d_nowprime
d_nowprime = d_nowprime + 2
endw
ends sub_getgaps_begin_again
subr sub_compare_dfac_and_dfak
'updated 2007/09/22
vari d_any, s_any, d_dot, s_dot, s_out
vari d_teaquadpart, d_teaquadone, d_teaquadmult
vari d_dfac, d_dfak
vari d_loop, d_seconds, d_count, d_maxcount
vari d_process, s_number, d_number
d_process = 1
dift d_process = 1
$inp s_any, "enter number to begin"
$ift s_any = "*": dinc d_process
$isd d_any, s_any
dift d_any = 1: $tod d_number, s_any
endi
dift d_process = 1
'make sure the number is odd
d_any = d_number % 2
dift d_any <> 1: dinc d_number
endi
dift d_process = 1
$inp s_any, "enter max number to compare"
$ift s_any = "*": dinc d_process
$isd d_any, s_any
d_maxcount = 0
dift d_any = 1: $tod d_maxcount, s_any
endi
d_count = 0
d_loop = d_process
dwhi d_loop = 1
dfac d_dfac, d_number
dfak d_dfak, d_number, 0
dift d_dfac = 1: dinc d_count
ded$ s_any, d_dfac, 0, 0
ded$ s_dot, d_dfak, 0, 0
ded$ s_number, d_number, 0, 0
s_out = d_count + ". " + s_number
$app s_out, " dfac=" + s_any
$app s_out, " dfak=" + s_dot
dift d_dfac = d_dfak
$app s_out, " equal"
dift d_dfac = 1: $out s_out
else
$app s_out, " not equal"
$out s_out
$inp s_any, "not equal"
endi
d_number = d_number + 2
dift d_count >= d_maxcount: dinc d_loop
endw
$inp s_any, "done"
ends sub_compare_dfac_and_dfak
subr sub_teaquad_primes_test_one_number
'updated 2007/07/19
'2007/03/04, 2007/02/26, 2007/02/25, 2007/02/24, 2006/12/06
'2006/11/15, 2006/11/14, 2006/11/12, 2006/11/11, 2006/10/25
'primes 9quad greater than 9E15 as total of two numbers
vari d_any, s_any, d_dot, s_dot, s_out
vari d_teaquadpart, d_factor,
vari d_loop, d_seconds, s_input, d_pick
vari d_process, d_teaquadone, d_teaquadmult, s_default
dpow d_teaquadone, 10, 15
d_process = 1
d_loop = d_process
dwhi d_loop = 1
$out "1. 39,713,433,671"
$out "11. 6,000,000,000,000,001"
$out "21. 9,002,235,408,655,631"
$out "31. 13,086,603,727,831,391"
$out "41. 108,000,000,000,000,001"
$out "51. 999,999,999,999,999,967"
$out "61. 999,999,999,999,999,989"
$inp s_input, "choose or enter number to test"
d_pick = 0
$len d_any, s_input
dift d_any < 4
$isd d_any, s_input
dift d_any = 1: $tod d_pick, s_input
endi
$ift s_input = "*"
dinc d_process
dinc d_loop
endi
dift d_process = 1
dift d_pick = 1: s_input = "39,713,433,671"
dift d_pick = 11: s_input = "6,000,000,000,000,001"
dift d_pick = 21: s_input = "9,002,235,408,655,631"
dift d_pick = 31: s_input = "13,086,603,727,831,391"
dift d_pick = 41: s_input = "108,000,000,000,000,001"
dift d_pick = 51: s_input = "999,999,999,999,999,967"
dift d_pick = 61: s_input = "999,999,999,999,999,989"
$out s_input
sg_pass1 = s_input
sub_teaquad_from_string
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
ded$ s_any, d_teaquadpart, 0, 0
$out "d_teaquadpart=" + s_any
ded$ s_any, d_teaquadmult, 0, 0
$out "d_teaquadmult=" + s_any
endi
dift d_process = 1
dsec d_seconds
dfak d_factor, d_teaquadpart, d_teaquadmult
dsec d_any
d_seconds = d_any - d_seconds
$out "seconds=" + d_seconds
ded$ s_any, d_teaquadpart, 0, 0
$out "d_teaquadpart=" + s_any
ded$ s_any, d_teaquadmult, 0, 0
$out "d_teaquadmult=" + s_any
ded$ s_any, d_factor, 0, 0
$out "d_factor=" + s_any
$inp s_any, "return"
endi
endw
ends sub_teaquad_primes_test_one_number
subr sub_teaquad_primes_test_in_file
'updated 2007/07/22, 2007/07/20
vari d_any, s_any, d_dot, s_dot, s_out
vari d_teaquadpart, d_factor, s_number, s_aster
vari d_loop, d_good, d_seconds, s_input, d_pick
vari d_process, d_teaquadone, d_teaquadmult, s_default
vari s_filename, s_record, d_filebyte
vari d_count1, d_count2
$ch$ s_aster, "*", 70
d_process = 1
dift d_process = 1
$inp s_filename, "enter filename"
$ift s_filename = "*": dinc d_process
endi
d_filebyte = 1
d_loop = d_process
dwhi d_loop = 1
d_good = 1
fsip s_record, s_filename, d_filebyte
dift d_filebyte = 0
dinc d_good
dinc d_loop
endi
dift d_good = 1
$trb s_record, s_record
$isd d_any, s_record
dift d_any <> 1
$out "not number " + s_record
dinc d_good
endi
endi
dift d_good = 1
$out s_aster
$out s_record
sg_pass1 = s_record
sub_teaquad_from_string
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
sub_teaquad_to_string
s_number = sg_pass1
ded$ s_any, d_teaquadpart, 0, 0
$out "d_teaquadpart=" + s_any
ded$ s_any, d_teaquadmult, 0, 0
$out "d_teaquadmult=" + s_any
$out s_number
dsec d_seconds
dfak d_factor, d_teaquadpart, d_teaquadmult
dsec d_any
d_seconds = d_any - d_seconds
$out "seconds=" + d_seconds
$out "factor=" + d_factor
dift d_factor = 1
dinc d_count1
$out "prime"
else
dinc d_count2
$inp s_any, "not prime"
$ift s_any = "*": dinc d_loop
endi
endi
endw
$inp s_any, "primes=" + d_count1 + " not=" + d_count2
ends sub_teaquad_primes_test_in_file
subr sub_teaquad_primes_find
'updated 2007/10/07, 2007/03/04, 2007/02/24, 2007/01/07, 2007/01/06
'2006/12/11, 2006/12/09, 2006/12/08, 2006/12/07, 2006/12/06
'2006/11/27, 2006/11/25, 2006/11/13, 2006/11/12, 2006/11/11
'2006/10/29, 2006/10/28, 2006/10/27, 2006/10/26, 2006/10/25
'find primes teaquad greater than 1E15 as total of two numbers
vari d_any, s_any, d_dot, s_dot, s_out
vari s_number, d_teaquadpart, d_teaquadmult, d_count, s_count
vari d_process, d_loop, d_show, d_factor, s_factor
vari d_seconds, d_previous, d_gap, d_ctmax
vari d_teaquadone, d_maxteaquadpart, d_maxteaquadmult
vari d_stopteaquadpart, d_stopteaquadmult
vari d_file, s_filename, s_date, d_factfactor
vari d_sec1, d_sec2
'stop for sure at 400E18
dpow d_maxteaquadpart, 10, 15
$tod d_maxteaquadmult, "400,000"
d_teaquadone = d_maxteaquadpart
d_process = 1
dift d_process = 1
d_teaquadpart = 1
d_teaquadmult = 1
$inp s_number, "enter begin number, default=teaquad"
$ift s_number = "*": dinc d_process
endi
dift d_process = 1
$trb s_number, s_number
$ift s_number <> sg_nothing
sg_pass1 = s_number
sub_teaquad_from_string
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
endi
d_any = d_teaquadpart % 2
dift d_any = 0: dinc d_teaquadpart
ded$ s_any, d_teaquadpart, 0, 0
$out "teaquadpart=" + s_any
$out "teaquadmult=" + d_teaquadmult
endi
dift d_process = 1
d_show = 2
$inp s_any, "1=show tries"
$ift s_any = "*": dinc d_process
$ift s_any = "1": d_show = 1
endi
dift d_process = 1
d_ctmax = 99999
$inp s_any, "how many to find, default=99999"
$ift s_any = "*": dinc d_process
$isd d_any, s_any
dift d_any = 1: $tod d_ctmax, s_any
endi
dift d_process = 1
d_file = 2
s_filename = "primes99.txt"
$inp s_any, "1=output to file " + s_filename
$ift s_any = "*": dinc d_process
$ift s_any = "1"
d_file = 1
flen d_any, s_filename
dift d_any >= 0
$inp s_any, "1=purge old file"
$ift s_any = "*": dinc d_process
$ift s_any = "1": fdel d_any, s_filename
endi
endi
endi
dift d_process = 1
d_stopteaquadpart = d_maxteaquadpart
d_stopteaquadmult = d_maxteaquadmult
$inp s_any, "enter stop number if wanted"
$ift s_any = "*": dinc d_process
sg_pass1 = s_any
sub_teaquad_from_string
d_stopteaquadpart = dg_pass1
d_stopteaquadmult = dg_pass2
s_out = "stop: teaquadpart=" + d_stopteaquadpart
$app s_out, ", teaquadmult=" + d_stopteaquadmult
$out s_out
endi
dsec d_sec1
d_count = 0
d_loop = d_process
dwhi d_loop = 1
dsec d_seconds
'use teapro command for fast method
dfak d_factor, d_teaquadpart, d_teaquadmult
dsec d_any
d_seconds = d_any - d_seconds
$dat s_date
$cut s_date, s_date, 1, 20
'is the factor prime
dfac d_factfactor, d_factor
'show number just tested
dg_pass1 = d_teaquadpart
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_number = sg_pass1
ded$ s_factor, d_factor, 0, 0
'if factor is prime append ":P"
dift d_factfactor = 1: $app s_factor, ":P"
s_out = s_number + " " + s_date
$app s_out, " fact=" + s_factor
$app s_out, " sec=" + d_seconds
$sho s_out
dift d_show = 1
$out s_out
dift d_file = 1: fapp d_any, "primes99.txt", s_out
endi
dift d_factfactor <> 1
$out s_out
$inp s_any, "factor not prime"
$ift s_any = "*": dinc d_loop
endi
dift d_factor = 1
'we have a teaquad prime
dinc d_count
s_count = "0000000" + d_count
$off s_count, s_count, 7
'find gap to previous prime
d_gap = 0
dift d_previous > 0: d_gap = d_teaquadpart - d_previous
d_previous = d_teaquadpart
dg_pass1 = d_teaquadpart
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_number = sg_pass1
s_out = s_count + ".prime=" + s_number
$app s_out, " " + s_date
$app s_out, " sec=" + d_seconds
$app s_out, " gap=" + d_gap
$out s_out
dift d_file = 1
s_out = "]" + " " + s_count
$app s_out, ".prime=" + s_number
$app s_out, " " + s_date
$app s_out, " gap=" + d_gap
fapp d_any, "primes99.txt", s_out
dbad d_any = 0
endi
endi
d_teaquadpart = d_teaquadpart + 2
dift d_teaquadpart > d_teaquadone
dinc d_teaquadmult
d_teaquadpart = 1
endi
dift d_count >= d_ctmax: dinc d_loop
dift d_stopteaquadpart > 0
dift d_teaquadmult >= d_stopteaquadmult
dift d_teaquadpart >= d_stopteaquadpart: dinc d_loop
endi
endi
'cannot go over 400E18
dift d_teaquadmult >= d_maxteaquadmult
dift d_teaquadpart >= d_maxteaquadpart: dinc d_loop
endi
endw
dsec d_sec2
d_any = d_sec2 - d_sec1
$inp s_any, "done, sec=" + d_any
ends sub_teaquad_primes_find
subr sub_9quad_prime_test
'updated 2006/10/25
'primes 9quad than 2^53 as total of two numbers
vari d_any, s_any, d_dot, s_dot
vari d_number1, d_number2, d_factor
vari d_loop, d_root, d_total
vari d_divisor, d_mod1, d_mod2, d_mod3
d_number1 = dg_pass1
d_number2 = dg_pass2
d_total = d_number1 + d_number2
dpow d_root, d_total, 0.5
d_factor = 1
d_divisor = 3
d_loop = 1
dwhi d_loop = 1
d_mod1 = d_number1 % d_divisor
d_mod2 = d_number2 % d_divisor
d_mod3 = d_mod1 + d_mod2 % d_divisor
dift d_mod3 = 0
d_factor = d_divisor
dinc d_loop
else
d_divisor = d_divisor + 2
dift d_divisor > d_root: dinc d_loop
endi
endw
dg_pass1 = d_factor
ends sub_9quad_prime_test
subr sub_9quad_to_string
'updated 2006/11/25, 2006/11/12, 2006/10/27
'change a 9quad number to a string
vari d_any, s_any, d_dot, s_dot
vari d_9part, d_9mult, s_line
vari s_beg, d_beg
d_9part = dg_pass1
d_9mult = dg_pass2
'123456789012345678901234567
'123,456,789,012,345,678,901
'123456789012345678901
dto$ s_line, d_9part, 0, 0
$ch$ s_any, "0", 30
s_line = s_any + s_line
$off s_line, s_line, 21
$cut s_beg, s_line, 1, 6
$tod d_beg, s_beg
d_beg = d_9mult * 9 + d_beg
$ch$ s_any, "0", 6
s_beg = s_any + d_beg
$off s_beg, s_beg, 6
$rep s_line, 1, s_beg
'put in commas
$ins s_line, 4, ","
$ins s_line, 8, ","
$ins s_line, 12, ","
$ins s_line, 16, ","
$ins s_line, 20, ","
$ins s_line, 24, ","
'take off leading zeros and commas
d_dot = 1
dwhi d_dot = 1
dinc d_dot
$cut s_any, s_line, 1, 1
$ift s_any = "0"
$cut s_line, s_line, 2, 99
d_dot = 1
endi
$ift s_any = ","
$cut s_line, s_line, 2, 99
d_dot = 1
endi
endw
sg_pass1 = s_line
ends sub_9quad_to_string
subr sub_9quad_from_strin