'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 2009/03/08, 2008/12/06, 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=689, 2009/06/17"
$out sg_build
$out "Copyright 1998-2009 D La Pierre Ballard"
$out "Written in the Teapro programming language"
$out "1998-2009 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 = duo teaquad 5TP39 begin again, 1quad"
$out "2 = duo teaquad 5TP39 choose file code and number"
$out "5 = 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_duo"
$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_duo"
$out "49 = sub_teaquad_mod_test"
$out "51 = sub_collect_5tp39xx"
$out "96 = sub_xyz_math"
$out "97 = sub_teaquad_prime_duo_speed_test"
$out "98 = sub_speed98_test"
$out "99 = sub_speed_test " + dg_pass1
dsec d_any
s_out = "pick a number *=end " + " x=" + dg_xvalue
$app s_out, " " + d_any
$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_duo
endi
'5tp39 find by modulus choose file code, beg, end
dift d_pick = 2
dg_pass1 = 2
sub_teaquad_5tp39_by_modulus_duo
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_duo
'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_duo
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_duo_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_duo
'updated 2009/06/17, 2009/06/12, 2009/06/11, 2009/0610, 2009/06/09
'2009/06/06, 2009/05/15, 2009/05/12, 2009/04/27, 2009/04/26
'2009/04/25, 2009/04/24, 22009/04/21, 2009/04/19, 2009/04/18
'2009/04/16, 2009/04/11, 2009/04/10, 2009/04/09, 2009/04/08
'2009/04/07, 2009/04/04, 2009/04/02, 2009/04/01, 2009/03/29
'2009/03/24, 2009/03/22, 2009/03/18, 2009/03/17, 2009/03/16
'2009/03/12, 2009/03/11, 2009/03/09, 2009/03/08, 2009/03/05
'2009/03/04, 2009/03/03, 2009/03/02, 2009/03/01, 2009/02/26
'2009/02/24, 2009/02/22, 2009/02/20, 2009/02/19, 2009/02/14
'2009/02/13, 2009/02/01, 2009/01/29, 2009/01/25, 2009/01/24
'2009/01/19, 2008/12/22, 2008/12/06, 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_tap, s_out, d_ask
vari s_test1, s_test2, s_test3, s_test4, s_test5, d_test
vari d_good, s_beginnumber, d_begseconds
vari s_datebegin, s_datelong, s_datenow
vari s_1timehournew, s_2timehournew, d_2timehournew
vari s_1timehourprev, s_2timehourprev, d_2timehourprev
vari d_primetest, s_primetest
vari d_dayteaquadpart, d_teaquadmaxpart, d_begin
vari d_hourteaquadpart, d_qtpcount, d_hrcount
vari d_accumdelta, d_billperhour, d_billion
vari d_quadsec1, d_quadsec2, d_quadsec3
vari d_pivcompart, s_pivcom, d_process, d_y630
vari d_number, s_number, d_div, d_duofactor
vari d_qtp20, d_debug
vari d_index, d_maxindex, d_maxarrayprime, d_beglines
vari d_filebyte, d_loop, s_record, s_file5tp39, s_line
vari s_afile, s_bfile, s_2all, s_2code, d_long, d_which
vari d_teaquadone, d_mod1, d_mod2, d_mod3
vari d_teaquad11part, d_teaquad49part
vari d_teaquadpart, d_teaquadmult
vari d_tqmod011, d_tqmod013, d_tqmod17, d_tqmod19
vari d_tqmod23, d_tqmod29, d_tqmod31, d_tqmod37
vari d_tqmod41, d_tqmod43, d_tqmod47, d_tqmod53
vari d_tqmod59, d_tqmod61, d_tqmod67, d_tqmod71
vari d_tqmod73, d_tqmod79, d_tqmod83, d_tqmod89
vari d_tqmod97, d_tqmod101, d_tqmod103, d_tqmod107
vari d_tqmod109, d_tqmod113, d_tqmod127, d_tqmod131
vari d_tqmod137, d_tqmod139, d_tqmod149, d_tqmod151
'd_which=1 for begin again get number from file,qtp20
'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_datebegin
'12345678901234567890
'05-MAR-2009 01:05:26
$cut s_datebegin, s_datebegin, 1, 17
d_debug = 2
d_qtp20 = 1
dift d_which <> 1
$inp s_any, "1=qtp20"
$ift s_any = "*": dinc d_process
$ift s_any <> "1": d_qtp20 = 2
endi
'which filename do we want in s_afile
s_2all = "a1,a2,h1,h2,h3,n0,n1,n2,n3,n4,j1,j2,d1,d2,d3,"
$app s_2all, "s1,s2,s3,s4,s5,s6,r1,r2,x1,x2,x3,x4,x5,x6,"
$app s_2all, "y0,y1,y2,y3,y4,y5,y6,y7,y8,y9,"
$app s_2all, "w0,w1,w2,w3,w4,w5,w6,w7,w8,w9,"
s_2code = sg_nothing
d_test = 1
d_dot = 1
d_loop = d_process
dift d_qtp20 <> 1: dinc d_loop
dwhi d_loop = 1
$par s_dot, s_2all, ",", d_dot
$len d_any, s_dot
dift d_any = 2
s_afile = "qtp20" + s_dot + "a.txt"
s_bfile = s_afile
$rep s_bfile, 8, "b"
flen d_any, s_afile
dift d_any > 10
s_2code = s_dot
dinc d_loop
dinc d_test
endi
dinc d_dot
else
dinc d_loop
endi
endw
d_dot = 1
d_loop = d_process
dift d_qtp20 = 1: dinc d_loop
dwhi d_loop = 1
$par s_dot, s_2all, ",", d_dot
$len d_any, s_dot
dift d_any = 2
s_afile = "a5tp39" + s_dot + ".txt"
s_bfile = s_afile
$rep s_bfile, 1, "b"
flen d_any, s_afile
dift d_any > 10
s_2code = s_dot
dinc d_loop
dinc d_test
endi
dinc d_dot
else
dinc d_loop
endi
endw
dift d_test = 1
'we did not find a file so zz
s_2code = "z" + "z"
dift d_qtp20 = 1
s_afile = "qtp20zza.txt"
s_bfile = "qtp20zzb.txt"
else
s_afile = "a5tp39zz.txt"
s_bfile = "b5tp39zz.txt"
endi
endi
'd_which=1 for begin again get number from file,qtp20
'd_which=2 for enter file code, beg, end
d_ask = 2
dift d_which = 2: d_ask = 1
dift d_process <> 1: d_ask = 99999
dift d_process <> 1: d_ask = 99999
'default for d_maxindex
d_maxindex = 20000
dift d_ask = 1
$ch$ s_any, "-", 70
$out s_any
'ask for d_maxindex
$inp s_any, "enter d_maxindex 100 to 20000"
$ift s_any = "*"
dinc d_process
dinc d_ask
endi
$isd d_any, s_any
dift d_any = 1: $tod d_maxindex, s_any
dift d_maxindex > 20000: d_maxindex = 20000
dift d_maxindex < 100: d_maxindex = 100
endi
d_any = 1
dift d_process <> 1: dinc d_any
dift d_any = 1
$ch$ s_any, "-", 70
$out s_any
'ask for file code
$out "a1,a2,d1,d2,d3,h1,h2,h3,n0,n1,n2,n3,n4,n5"
$out "s1,s2,s3,s4,s5,s6,r1,r2,x1,x2,x3,x4,x5,x6"
$out "y0,y1,y2,y3,y4,y5,y6,y7,y8,y9"
$out "w0,w1,w2,w3,w4,w5,w6,w7,w8,w9"
$out "default files=" + s_afile + " and " + s_bfile
s_any = "enter different two letter file code, "
$app s_any, "return for default, zz=test"
$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_2code = s_any
endi
dift d_process = 1
$ch$ s_any, "-", 70
$out s_any
dift d_qtp20 = 1
s_afile = "qtp20" + s_2code + "a.txt"
s_bfile = s_afile
$rep s_bfile, 8, "b"
else
s_afile = "a5tp39" + s_2code + ".txt"
s_bfile = s_afile
$rep s_bfile, 1, "b"
endi
$out "looking at files=" + s_afile + " and " + s_bfile
'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
$tup s_record, s_record
$ift s_record = "STOP"
$inp s_any, "STOP for " + s_2code
dinc d_loop
dinc d_process
dinc d_ask
endi
$app s_record, " "
$lok d_any, s_record, 1, " "
$cut s_any, s_record, 1, d_any
'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
endi
endi
endw
endi
dift d_process = 1
'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 "last=" + s_line
dift d_which = 1: d_ask = 2
dift d_teaquad11part = 0: d_ask = 1
$ift s_2code = "zz": d_ask = 1
endi
dift d_process <> 1: d_ask = 99999
d_test = 0
dift d_ask = 1
'ask for beginning number
'enter beginning number
s_test1 = "9,999,900,000,000,000"
s_test2 = "9,999,800,000,000,000"
s_test3 = "9,999,700,000,000,000"
s_test4 = "9,999,600,000,000,000"
s_test5 = "9,999,500,000,000,000"
$out "test1=" + s_test1
$out "test2=" + s_test2
$out "test3=" + s_test3
$out "test4=" + s_test4
$out "test5=" + s_test5
$out "E15=in quadrillions"
dg_pass1 = d_teaquad11part
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_number = sg_pass1
$out "beg=" + s_number
$out "debug=debug"
s_out = "12345678901234567890123, or test1,test2,..."
$inp s_any, s_out
$tup s_any, s_any
$ift s_any = "*": dinc d_process
$ift s_any = "DEBUG"
d_debug = 1
$inp s_any, s_out
$tup s_any, s_any
$ift s_any = "*": dinc d_process
endi
d_test = 0
$ift s_any = "TEST1": d_test = 1
$ift s_any = "TEST2": d_test = 2
$ift s_any = "TEST3": d_test = 3
$ift s_any = "TEST4": d_test = 4
$ift s_any = "TEST5": d_test = 5
$ift s_any = "TEST1": s_any = s_test1
$ift s_any = "TEST2": s_any = s_test2
$ift s_any = "TEST3": s_any = s_test3
$ift s_any = "TEST4": s_any = s_test4
$ift s_any = "TEST5": s_any = s_test5
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
'first drop back a bit for conservatism.
d_teaquad11part = d_teaquad11part - 10000
'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_datenow
$cut s_datenow, s_datenow, 1, 17
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_datenow
$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 is asked for above
d_number = 157
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_maxarrayprime, d_maxindex
s_any = "array from=" + d_any + " to " + d_maxarrayprime
$app s_any, " ct=" + d_maxindex
$out s_any + " " + s_afile
endi
dift d_process = 1
$ch$ s_any, "-", 70
$out s_any
$out "last=" + s_line
'output beginning number
$out "beg= " + s_beginnumber + " " + s_2code
'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 + " " + s_2code
endi
d_tqmod011 = d_teaquadone % 11 * d_teaquadmult % 11
d_tqmod013 = d_teaquadone % 13 * d_teaquadmult % 13
d_tqmod17 = d_teaquadone % 17 * d_teaquadmult % 17
d_tqmod19 = d_teaquadone % 19 * d_teaquadmult % 19
d_tqmod23 = d_teaquadone % 23 * d_teaquadmult % 23
d_tqmod29 = d_teaquadone % 29 * d_teaquadmult % 29
d_tqmod31 = d_teaquadone % 31 * d_teaquadmult % 31
d_tqmod37 = d_teaquadone % 37 * d_teaquadmult % 37
d_tqmod41 = d_teaquadone % 41 * d_teaquadmult % 41
d_tqmod43 = d_teaquadone % 43 * d_teaquadmult % 43
d_tqmod47 = d_teaquadone % 47 * d_teaquadmult % 47
d_tqmod53 = d_teaquadone % 53 * d_teaquadmult % 53
d_tqmod59 = d_teaquadone % 59 * d_teaquadmult % 59
d_tqmod61 = d_teaquadone % 61 * d_teaquadmult % 61
d_tqmod67 = d_teaquadone % 67 * d_teaquadmult % 67
d_tqmod71 = d_teaquadone % 71 * d_teaquadmult % 71
d_tqmod73 = d_teaquadone % 73 * d_teaquadmult % 73
d_tqmod79 = d_teaquadone % 79 * d_teaquadmult % 79
d_tqmod83 = d_teaquadone % 83 * d_teaquadmult % 83
d_tqmod89 = d_teaquadone % 89 * d_teaquadmult % 89
d_tqmod97 = d_teaquadone % 97 * d_teaquadmult % 97
d_tqmod101 = d_teaquadone % 101 * d_teaquadmult % 101
d_tqmod103 = d_teaquadone % 103 * d_teaquadmult % 103
d_tqmod107 = d_teaquadone % 107 * d_teaquadmult % 107
d_tqmod109 = d_teaquadone % 109 * d_teaquadmult % 109
d_tqmod113 = d_teaquadone % 113 * d_teaquadmult % 113
d_tqmod127 = d_teaquadone % 127 * d_teaquadmult % 127
d_tqmod131 = d_teaquadone % 131 * d_teaquadmult % 131
d_tqmod137 = d_teaquadone % 137 * d_teaquadmult % 137
d_tqmod139 = d_teaquadone % 139 * d_teaquadmult % 139
d_tqmod149 = d_teaquadone % 149 * d_teaquadmult % 149
d_tqmod151 = d_teaquadone % 151 * d_teaquadmult % 151
'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
'12345678901234567890123456789012345
'17-DEC-2002 03:56:22 20021217035622
'get second digit of the hour to test for hour change
$dat s_datelong
$cut s_1timehournew, s_datelong, 14, 1
$cut s_2timehournew, s_datelong, 13, 2
s_1timehourprev = s_1timehournew
s_2timehourprev = s_2timehournew
d_2timehourprev = 99999
'12345678901234567890
'05-MAR-2009 01:05:26
$cut s_datebegin, s_datelong, 1, 17
dift d_process = 1
'output begin date to file
s_out = "date=" + s_datelong + " " + s_afile
$out s_out
fapp d_any, s_afile, s_out
dbad d_any = 0
endi
d_qtpcount = 0
d_hrcount = -1
d_accumdelta = 0
'put begin lines in d_beglines
dsys d_beglines, 2
d_dayteaquadpart = d_teaquad49part - 38
d_hourteaquadpart = d_dayteaquadpart
dsec d_begseconds
'HERE sub_teaquad_5tp39_by_modulus_duo
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_tqmod013 = d_teaquadone % 13 * d_teaquadmult % 13
d_mod1 = d_tqmod013 + 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_tqmod17 = d_teaquadone % 17 * d_teaquadmult % 17
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_tqmod19 = d_teaquadone % 19 * d_teaquadmult % 19
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_tqmod23 = d_teaquadone % 23 * d_teaquadmult % 23
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_tqmod29 = d_teaquadone % 29 * d_teaquadmult % 29
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_tqmod31 = d_teaquadone % 31 * d_teaquadmult % 31
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_tqmod37 = d_teaquadone % 37 * d_teaquadmult % 37
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_tqmod41 = d_teaquadone % 41 * d_teaquadmult % 41
d_mod1 = d_tqmod41 + d_teaquad49part % 41
dift d_mod1 < 19
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
else
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
'mod 43
'p49%43 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod43 = d_teaquadone % 43 * d_teaquadmult % 43
d_mod1 = d_tqmod43 + d_teaquad49part % 43
dift d_mod1 < 19
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
else
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
'mod 47
'p49%47 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod47 = d_teaquadone % 47 * d_teaquadmult
d_mod1 = d_tqmod47 + d_teaquad49part % 47
dift d_mod1 < 19
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
else
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
'mod 53
'p49%53 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod53 = d_teaquadone % 53 * d_teaquadmult % 53
d_mod1 = d_tqmod53 + d_teaquad49part % 53
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 59
'p49%59 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod59 = d_teaquadone % 59 * d_teaquadmult % 59
d_mod1 = d_tqmod59 + d_teaquad49part % 59
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 61
'p49%61 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod61 = d_teaquadone % 61 * d_teaquadmult % 61
d_mod1 = d_tqmod61 + d_teaquad49part % 61
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 67
'p49%67 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod67 = d_teaquadone % 67 * d_teaquadmult % 67
d_mod1 = d_tqmod67 + d_teaquad49part % 67
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 71
'p49%71 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod71 = d_teaquadone % 71 * d_teaquadmult % 71
d_mod1 = d_tqmod71 + d_teaquad49part % 71
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 73
'p49%73 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod73 = d_teaquadone % 73 * d_teaquadmult % 73
d_mod1 = d_tqmod73 + d_teaquad49part % 73
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 79
'p49%79 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod79 = d_teaquadone % 79 * d_teaquadmult % 79
d_mod1 = d_tqmod79 + d_teaquad49part % 79
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 83
'p49%83 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod83 = d_teaquadone % 83 * d_teaquadmult % 83
d_mod1 = d_tqmod83 + d_teaquad49part % 83
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 89
'p49%89 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod89 = d_teaquadone % 89 * d_teaquadmult % 89
d_mod1 = d_tqmod89 + d_teaquad49part % 89
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 97
'p49%97 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod97 = d_teaquadone % 97 * d_teaquadmult % 97
d_mod1 = d_tqmod97 + d_teaquad49part % 97
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 101
'p49%101 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod101 = d_teaquadone % 101 * d_teaquadmult % 101
d_mod1 = d_tqmod101 + d_teaquad49part % 101
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 103
'p49%103 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod103 = d_teaquadone % 103 * d_teaquadmult % 103
d_mod1 = d_tqmod103 + d_teaquad49part % 103
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 107
'p49%107 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod107 = d_teaquadone % 107 * d_teaquadmult % 107
d_mod1 = d_tqmod107 + d_teaquad49part % 107
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 109
'p49%109 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod109 = d_teaquadone % 109 * d_teaquadmult % 109
d_mod1 = d_tqmod109 + d_teaquad49part % 109
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 113
'p49%113 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod113 = d_teaquadone % 113 * d_teaquadmult % 113
d_mod1 = d_tqmod113 + d_teaquad49part % 113
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 127
'p49%127 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod127 = d_teaquadone % 127 * d_teaquadmult % 127
d_mod1 = d_tqmod127 + d_teaquad49part % 127
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 131
'p49%131 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod131 = d_teaquadone % 131 * d_teaquadmult % 131
d_mod1 = d_tqmod131 + d_teaquad49part % 131
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 137
'p49%137 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod137 = d_teaquadone % 137 * d_teaquadmult % 137
d_mod1 = d_tqmod137 + d_teaquad49part % 137
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 139
'p49%139 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod139 = d_teaquadone % 139 * d_teaquadmult % 139
d_mod1 = d_tqmod139 + d_teaquad49part % 139
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 149
'p49%149 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod149 = d_teaquadone % 149 * d_teaquadmult % 149
d_mod1 = d_tqmod149 + d_teaquad49part % 149
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'mod 151
'p49%151 bad are 0,2,6,8,18,20,30,32,36,38
'd_tqmod151 = d_teaquadone % 151 * d_teaquadmult % 151
d_mod1 = d_tqmod151 + d_teaquad49part % 151
dift d_mod1 < 39
dift d_mod1 < 19
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
else
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
endi
'157 is in the array with index=1
d_index = 1
gtag tag_nextindex
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 < 19
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
else
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
endi
dinc d_index
dift d_index <= d_maxindex: goto tag_nextindex
'HERE sub_teaquad_5tp39_by_modulus_duo
'get d_quadsec1 at begin of testing
dsec d_quadsec1
'test the p11,p13 duo
d_teaquad11part = d_teaquad49part - 38
dduo d_duofactor, d_teaquad11part, d_teaquadmult
dift d_debug = 1
dsec d_any
d_any = d_any - d_begseconds
ded$ s_any, d_duofactor, 15, 0
dg_pass1 = d_teaquad11part
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_dot = sg_pass1
s_out = "fact=" + s_any + " num=" + s_dot
$app s_out, " secs=" + d_any
$out s_out
endi
dift d_duofactor <> 1
dift d_duofactor <= d_maxarrayprime
s_out = "duofactor=" + d_duofactor
$app s_out, " less than=" + d_maxarrayprime
$app s_out, " num=" + d_teaquadmult + " "
$app s_out, d_teaquad11part
$out s_out
fapp d_any, s_afile, s_out
endi
goto tag_nextnumber
endi
'12345678901234567890123456789012345
'17-DEC-2002 03:56:22 20021217035622
'get second digit of the hour to test for hour change
$dat s_datelong
$cut s_1timehournew, s_datelong, 14, 1
dg_pass1 = d_teaquad11part
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_primetest = sg_pass1
s_out = s_primetest + " " + s_datelong
$sho s_out
$ift s_1timehournew <> s_1timehourprev
s_1timehourprev = s_1timehournew
'12345678901234567890123456789012345
'17-DEC-2002 03:56:22 20021217035622
'get 20 long s_datenow
$cut s_datenow, s_datelong, 1, 17
$cut s_2timehournew, s_datelong, 13, 2
'we have new hour
'is there a problem with it
$tod d_2timehournew, s_2timehournew
'd_2timehourprev was initialized to 99999
dift d_2timehourprev <> 99999
d_dot = d_2timehournew - 1
dift d_dot < 0: d_dot = 23
dift d_dot <> d_2timehourprev
s_out = "bad hour old=" + s_2timehourprev
$app s_out, ", new=" + s_2timehournew
$out s_out
fapp d_any, s_afile, s_out
dbad d_any = 0
endi
endi
d_2timehourprev = d_2timehournew
s_2timehourprev = s_2timehournew
dinc d_hrcount
'get d_billperhour change
dift d_hrcount < 1: d_hourteaquadpart = d_teaquad11part
d_dot = d_teaquad11part - d_hourteaquadpart
d_accumdelta = d_accumdelta + d_dot
d_billperhour = 0
dift d_hrcount > 0
dift d_hrcount > 24
'prorate to 24 hours
d_accumdelta = d_accumdelta / 25 * 24
d_billperhour = d_accumdelta / 24
d_billperhour = d_billperhour / d_billion @ 0
else
d_billperhour = d_accumdelta / d_hrcount
d_billperhour = d_billperhour / d_billion @ 0
endi
endi
d_hourteaquadpart = d_teaquad11part
s_out = s_primetest + " " + s_datenow
$app s_out, " bph:" + d_billperhour + " " + d_hrcount
$app s_out, " " + d_qtpcount
fapp d_any, s_afile, s_out
dbad d_any = 0
$out s_out + " " + s_2code
$ift s_2timehournew = "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_datebegin
$app s_out, " " + d_qtpcount + " " + s_2code
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 prorate
'get trillion per day
d_dot = 10 ^ 12
d_any = d_any / d_dot
'prorate d_any if needed for trillion/day
dift d_hrcount < 24
dift d_hrcount > 0
d_any = d_any * 24 / d_hrcount
endi
endi
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
'd_teaquadmaxpart is d_teaquadone
'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_datenow
$out s_out
dift d_test > 0
$out s_test1
dsec d_any
d_any = d_any - d_begseconds
s_out = "test" + d_test + " seconds=" + d_any
dsys d_any, 2
d_any = d_any - d_beglines
ded$ s_any, d_any, 0, 0
$app s_out, " lines=" + s_any
$out s_out
$inp s_any, "stop"
goto tag_endsubr
endi
'output beginning and ending dates and afile
s_out = "beg=" + s_datebegin
$app s_out, " end=" + s_datenow
$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
'qtp20j1a.txt
$cut s_any, s_afile, 1, 3
$ift s_any = "qtp"
$cut s_any, s_afile, 6, 1
else
$cut s_any, s_afile, 7, 1
endi
d_dot = 1
$ift s_any = "j": dinc d_dot
$ift s_any = "u": 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_teaquadmaxpart is always d_teaquadone
'd_teaquadone is 1E15 or 10^15
dinc d_teaquadmult
d_teaquad11part = d_teaquad11part - d_teaquadone
d_teaquad49part = d_teaquad49part - d_teaquadone
'12345678901234567890123456789012345
'17-DEC-2002 03:56:22 20021217035622
'get second digit of the hour to test for hour change
$dat s_datelong
s_1timehournew = "x"
$cut s_2timehournew, s_datelong, 13, 2
s_1timehourprev = s_1timehournew
s_2timehourprev = s_2timehournew
d_2timehourprev = 99999
'initialize various counters
d_dayteaquadpart = 0
d_hrcount = -1
d_accumdelta = 0
d_qtpcount = 0
d_tqmod011 = d_teaquadone % 11 * d_teaquadmult % 11
d_tqmod013 = d_teaquadone % 13 * d_teaquadmult % 13
d_tqmod17 = d_teaquadone % 17 * d_teaquadmult % 17
d_tqmod19 = d_teaquadone % 19 * d_teaquadmult % 19
d_tqmod23 = d_teaquadone % 23 * d_teaquadmult % 23
d_tqmod29 = d_teaquadone % 29 * d_teaquadmult % 29
d_tqmod31 = d_teaquadone % 31 * d_teaquadmult % 31
d_tqmod37 = d_teaquadone % 37 * d_teaquadmult % 37
d_tqmod41 = d_teaquadone % 41 * d_teaquadmult % 41
d_tqmod43 = d_teaquadone % 43 * d_teaquadmult % 43
d_tqmod47 = d_teaquadone % 47 * d_teaquadmult % 47
d_tqmod53 = d_teaquadone % 53 * d_teaquadmult % 53
d_tqmod59 = d_teaquadone % 59 * d_teaquadmult % 59
d_tqmod61 = d_teaquadone % 61 * d_teaquadmult % 61
d_tqmod67 = d_teaquadone % 67 * d_teaquadmult % 67
d_tqmod71 = d_teaquadone % 71 * d_teaquadmult % 71
d_tqmod73 = d_teaquadone % 73 * d_teaquadmult % 73
d_tqmod79 = d_teaquadone % 79 * d_teaquadmult % 79
d_tqmod83 = d_teaquadone % 83 * d_teaquadmult % 83
d_tqmod89 = d_teaquadone % 89 * d_teaquadmult % 89
d_tqmod97 = d_teaquadone % 97 * d_teaquadmult % 97
d_tqmod101 = d_teaquadone % 101 * d_teaquadmult % 101
d_tqmod103 = d_teaquadone % 103 * d_teaquadmult % 103
d_tqmod107 = d_teaquadone % 107 * d_teaquadmult % 107
d_tqmod109 = d_teaquadone % 109 * d_teaquadmult % 109
d_tqmod113 = d_teaquadone % 113 * d_teaquadmult % 113
d_tqmod127 = d_teaquadone % 127 * d_teaquadmult % 127
d_tqmod131 = d_teaquadone % 131 * d_teaquadmult % 131
d_tqmod137 = d_teaquadone % 137 * d_teaquadmult % 137
d_tqmod139 = d_teaquadone % 139 * d_teaquadmult % 139
d_tqmod149 = d_teaquadone % 149 * d_teaquadmult % 149
d_tqmod151 = d_teaquadone % 151 * d_teaquadmult % 151
endi
'test the p17,p19 duo
d_teaquadpart = d_teaquad11part + 6
dduo d_duofactor, d_teaquadpart, d_teaquadmult
dift d_duofactor <> 1
dift d_duofactor <= d_maxarrayprime
s_out = "duofactor=" + d_duofactor
$app s_out, " less than=" + d_maxarrayprime
$app s_out, " num=" + d_teaquadmult + " "
$app s_out, d_teaquadpart
$out s_out
fapp d_any, s_afile, s_out
endi
goto tag_nextnumber
endi
'test the p29,p31 duo
d_teaquadpart = d_teaquad11part + 18
dduo d_duofactor, d_teaquadpart, d_teaquadmult
dift d_duofactor <> 1
dift d_duofactor <= d_maxarrayprime
s_out = "duofactor=" + d_duofactor
$app s_out, " less than=" + d_maxarrayprime
$app s_out, " num=" + d_teaquadmult + " "
$app s_out, d_teaquadpart
$out s_out
fapp d_any, s_afile, s_out
endi
goto tag_nextnumber
endi
'test the p41,p43 duo
d_teaquadpart = d_teaquad11part + 30
dduo d_duofactor, d_teaquadpart, d_teaquadmult
dift d_duofactor <> 1
dift d_duofactor <= d_maxarrayprime
s_out = "duofactor=" + d_duofactor
$app s_out, " less than=" + d_maxarrayprime
$app s_out, " num=" + d_teaquadmult + " "
$app s_out, d_teaquadpart
$out s_out
fapp d_any, s_afile, s_out
endi
goto tag_nextnumber
endi
'test the p47,p49 duo
d_teaquadpart = d_teaquad11part + 36
dduo d_duofactor, d_teaquadpart, d_teaquadmult
dift d_duofactor <> 1
dift d_duofactor <= d_maxarrayprime
s_out = "duofactor=" + d_duofactor
$app s_out, " less than=" + d_maxarrayprime
$app s_out, " num=" + d_teaquadmult + " "
$app s_out, d_teaquadpart
$out s_out
fapp d_any, s_afile, s_out
endi
goto tag_nextnumber
endi
'get test seconds in d_quadsec2 and round to integer
dsec d_quadsec2
d_quadsec3 = d_quadsec2 - d_quadsec1 \ 1
'for Suse 9.3
dift d_quadsec3 > 99999: d_quadsec3 = d_quadsec3 \ 10000
'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_datenow
$cut s_datenow, s_datenow, 1, 17
s_out = "] 000:5TP39= " + s_primetest + " " + s_datenow
$app s_out, " " + d_quadsec3 + " " + s_2code
$app s_out, " " + 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_duo
subr sub_5tp39_two_files_compare
'updated 2008/12/22, 2008/12/09, 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_matchupfile, d_nostop
vari d_ctdata1, d_ctdata2, d_cte15
$ch$ s_dashes, "-", 50
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=matchup.txt"
$ift s_any = "*": dinc d_process
d_matchupfile = 2
$ift s_any = "1"
d_matchupfile = 1
fdel d_any, "matchup.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_cte15 = 0
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
' 12345678901234567890
'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
s_out = d_cte15 + " " + s_dot
$app s_out, "E15" + s_dashes
$out s_out
dift d_matchupfile = 1
fapp d_any, "matchup.txt", s_out
dbad d_any = 0
endi
d_cte15 = 0
endi
endi
'increment count per e15
dinc d_cte15
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_matchupfile = 1
fapp d_any, "matchup.txt", s_out
dbad d_any = 0
endi
'stop every 20 lines unless d_nostop=1
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_duo
'updated 2008/12/06, 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,13
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
dduo 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,19
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
dduo 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,31
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
dduo 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,43
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
dduo 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,49
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
dduo 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_duo
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 2009/03/04, 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
dsec d_any
$out s_any + s_out + " sec=" + d_any
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_duo
'updated 2008/12/12, 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
dduo d_factor, d_teaquadpart, d_teaquadmult
d_any = d_teaquadpart + 6
dift d_factor = 1: dduo 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_duo
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_string
'updated 2006/11/25, 2006/11/12, 2006/10/28
'9quad string to d_9part
vari d_any, s_any, d_dot, s_dot
vari d_9part, d_9mult
vari s_line, d_good, d_long, s_beg, d_beg
s_line = sg_pass1
d_9part = 0
d_9mult = 0
'123456789012345678901234567
'123,456,789,012,345,678,901
'123456789012345678901
d_good = 1
dift d_good = 1
'eliminate commas and validate for all numbers
$trb s_line, s_line
$swp s_line, ",", sg_nothing
$ist d_any, s_line, "9"
dift d_any <> 1: dinc d_good
endi
dift d_good = 1
$len d_long, s_line
dift d_long < 16
$tod d_9part, s_line
dinc d_good
endi
endi
'123456789012345678901234567
'123,456,789,012,345,678,901
'123456789012345678901
dift d_good = 1
'make 21 long
$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_9mult = d_beg \ 9
d_beg = d_beg % 9
$cut s_any, s_line, 7, 99
s_any = d_beg + s_any
$tod d_9part, s_any
endi
dg_pass1 = d_9part
dg_pass2 = d_9mult
ends sub_9quad_from_string
subr sub_teaquad_to_string
'updated 2007/03/30, 2007/02/24, 2006/11/25, 2006/11/12, 2006/10/27
'change a teaquad number in d_teaquadpart,d_teaquadmult to a string
vari d_any, s_any, d_dot, s_dot
vari d_teaquadpart, d_teaquadmult, s_line
vari s_beg, d_beg
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
dift d_teaquadpart < 0
dpow d_any, 10 ,15
d_teaquadpart = d_teaquadpart + d_any
ddec d_teaquadmult
endi
'123456789012345678901234567
'123,456,789,012,345,678,901
'123456789012345678901
dto$ s_line, d_teaquadpart, 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_teaquadmult + 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 in 21 digit number
$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_teaquad_to_string
subr sub_teaquad_from_string
'updated 2007/02/24, 2006/11/25, 2006/11/12, 2006/10/28
'teaquad string to d_teaquadpart,d_teaquadmult
'1part is the 15 digits on the right,1mult is the left digits
vari d_any, s_any, d_dot, s_dot
vari d_teaquadpart, d_teaquadmult
vari s_line, d_good, d_long, s_beg, d_beg
s_line = sg_pass1
d_teaquadpart = 0
d_teaquadmult = 0
'123456789012345678901234567
'123,456,789,012,345,678,901
'123456789012345678901
d_good = 1
dift d_good = 1
'eliminate commas and validate for all numbers
$trb s_line, s_line
$swp s_line, ",", sg_nothing
$ist d_any, s_line, "9"
dift d_any <> 1: dinc d_good
endi
'123456789012345678901234567
'123,456,789,012,345,678,901
'123456789012345678901
dift d_good = 1
'make 21 long
$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_teaquadmult, s_beg
$cut s_any, s_line, 7, 99
$tod d_teaquadpart, s_any
endi
dg_pass1 = d_teaquadpart
dg_pass2 = d_teaquadmult
ends sub_teaquad_from_string
subr sub_teaquad_shift
'updated 2007/02/24
'shift teaquad by correcting d_teaquadpart,d_teaquadmult
vari d_any, s_any, d_dot, s_dot
vari d_teaquadpart, d_teaquadmult
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
dpow d_dot, 10, 15
dift d_teaquadpart > d_dot
d_any = d_teaquadpart \ d_dot
d_teaquadmult = d_teaquadmult + d_any
d_teaquadpart = d_teaquadpart - d_any
endi
dg_pass1 = d_teaquadpart
dg_pass2 = d_teaquadmult
ends sub_teaquad_shift
subr sub_teaquad_from_primes31
'updated 2007/08/30
vari d_any, s_any, d_dot, s_dot, d_factor, d_debug
vari d_teaquadpart, d_teaquadmult, d_teaquadone
vari d_primes31part, d_primes31mult
'N = 200,560,490,130 * d_primes31mult + d_primes31part
'max for d_primes31part is 200,560,490,130
'max for d_primes31mult is 1E7
d_primes31part = dg_pass1
d_primes31mult = dg_pass2
d_debug = 2
d_teaquadpart = 0
d_teaquadmult = 0
d_teaquadone = 10 ^ 15
'560,490,130
d_teaquadpart = 560490130 * d_primes31mult + d_primes31part
dift d_debug = 1
ded$ s_any, d_teaquadpart, 0, 0
$out "A=" + s_any
endi
'any of d_teaquadpart over 1E15 goes into d_teaquadmult
d_factor = 10 ^ 15
d_any = d_teaquadpart \ d_factor
d_teaquadmult = d_any
dift d_debug = 1
ded$ s_any, d_teaquadmult, 0, 0
$out "B=" + s_any
endi
d_teaquadpart = d_teaquadpart % d_factor
dift d_debug = 1
ded$ s_any, d_teaquadpart, 0, 0
$out "C=" + s_any
endi
'now get the biggest part without multiplying by 1E9
d_dot = 200 * d_primes31mult
dift d_debug = 1
ded$ s_any, d_dot, 0, 0
$out "D=" + s_any
endi
'any of d_dot over 1E6 goes to d_teaquadmult
d_factor = 10 ^ 6
d_any = d_dot \ d_factor
dift d_debug = 1
ded$ s_any, d_any, 0, 0
$out "E=" + s_any
endi
d_teaquadmult = d_teaquadmult + d_any
dift d_debug = 1
ded$ s_any, d_teaquadmult, 0, 0
$out "F=" + s_any
endi
d_dot = d_dot % d_factor
'multiply it by 1E9 and add to d_teaquadpart
d_dot = 10 ^ 9 * d_dot
d_teaquadpart = d_teaquadpart + d_dot
dift d_debug = 1
ded$ s_any, d_teaquadpart, 0, 0
$out "G=" + s_any
endi
dg_pass1 = d_teaquadpart
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
$out sg_pass1
ends sub_teaquad_from_primes31
subr sub_file_primes31_to_teaquad
'updated 2007/08/30
'translate file of primes31 to teaquad
'file format from
'noted prime number researcher Jens Kruse Andersen
vari d_any, s_any, d_dot, s_dot
vari s_filein, s_fileout, d_filebyte, s_record
vari d_process, d_good, d_loop, d_count
vari d_primes31part, d_primes31mult
d_process = 1
dift d_process = 1
$inp s_filein, "input filename"
$ift s_filein = "*": dinc d_process
endi
dift d_process = 1
$inp s_fileout, "output filename"
$ift s_fileout = "*": dinc d_process
endi
d_filebyte = 1
d_loop = d_process
dwhi d_loop = 1
d_good = 1
fsip s_record, s_filein, d_filebyte
dift d_filebyte = 0
dinc d_good
dinc d_loop
endi
dift d_good = 1
'must have "10*0+" for a good record
$lok d_dot, s_record, 1, "10*0+"
dift d_dot = 0: dinc d_good
endi
dift d_good = 1
d_primes31part = 0
d_primes31mult = 0
d_dot = d_dot + 5
$cut s_record, s_record, d_dot, 999
$trb s_record, s_record
$lok d_dot, s_record, 1, " "
$cut s_dot, s_record, 1, d_dot
$trb s_dot, s_dot
$isd d_any, s_dot
dift d_any = 1: $tod d_primes31mult, s_dot
$cut s_dot, s_record, d_dot, 999
$trb s_dot, s_dot
$isd d_any, s_dot
dift d_any = 1: $tod d_primes31part, s_dot
endi
dift d_good = 1
dg_pass1 = d_primes31part
dg_pass2 = d_primes31mult
sub_teaquad_from_primes31
s_record = sg_pass1
fapp d_any, s_fileout, s_record
dbad d_any = 0
dinc d_count
endi
endw
$inp s_any, "count=" + d_count
ends sub_file_primes31_to_teaquad
subr sub_test_primes31_to_teaquad
'updated 2007/08/30
vari d_any, s_any, d_dot, s_dot
vari s_input, d_loop, d_good
vari d_primes31part, d_primes31mult
d_loop = 1
dwhi d_loop = 1
d_good = 1
dift d_good = 1
$inp s_input, "enter primes31mult=x"
$ift s_input = "*": dinc d_good
$isd d_any, s_input
dift d_any = 1: $tod d_primes31mult, s_input
endi
dift d_good = 1
$inp s_input, "enter primes31part=y"
$ift s_input = "*": dinc d_good
$isd d_any, s_input
dift d_any = 1: $tod d_primes31part, s_input
endi
dift d_good = 1
dg_pass1 = d_primes31part
dg_pass2 = d_primes31mult
sub_teaquad_from_primes31
endi
d_loop = d_good
endw
ends sub_test_primes31_to_teaquad
subr sub_teaquad_mod_test
'updated 2008/11/04, 2007/04/01
'2007/03/27, 2007/03/03, 2007/03/02, 2007/02/27, 2007/02/26
'test teaquad and 9quad mod
vari d_any, s_any, d_dot, s_dot
vari d_tqdpart, d_tqdmult
vari s_2to53, d_2to53, d_tqdone
vari d_process, d_number, d_root
vari d_mod1, d_mod2, d_mod3, d_mod4, d_mod5, d_mod6
vari s_dashes, s_err
$ch$ s_dashes, "-", 70
s_err = "number too big"
dpow d_2to53, 2, 53
ded$ s_2to53, d_2to53, 0, 0
s_err = "number bigger than=" + s_2to53
dpow d_tqdone, 10, 15
d_process = 1
dift d_process = 1
$out "we use tqd to mean teaquad below"
$inp s_any, "enter d_tqdpart"
$ift s_any = "*": dinc d_process
$isd d_any, s_any
d_tqdpart = 1
dift d_any = 1: $tod d_tqdpart, s_any
endi
dift d_process = 1
$inp s_any, "enter d_tqdmult"
$ift s_any = "*": dinc d_process
$isd d_any, s_any
d_tqdmult = 1
dift d_any = 1: $tod d_tqdmult, s_any
endi
dift d_process = 1
d_number = d_tqdone * d_tqdmult + d_tqdpart
dpow d_root, d_number, 0.5
dtru d_root, d_root
$out s_dashes
ded$ s_any, d_2to53, 0, 0
$out "d_2to53=" + s_any
$out s_dashes
ded$ s_any, d_tqdone, 0, 0
$out "d_tqdone=" + s_any
$out s_dashes
$out "we are using tqd to mean teaquad below:"
$out "the tqd algorithm in C90 briefly is as follows:"
s_any = "d_mod = fmod(d_tqdpart + d_tqdmult * "
$app s_any, "fmod(d_tqdone, d_div), d_div);"
$out s_any
$out s_dashes
ded$ s_any, d_tqdpart, 0, 0
$out "d_tqdpart=" + s_any
$out s_dashes
ded$ s_any, d_tqdmult, 0, 0
$out "d_tqdmult=" + s_any
$out s_dashes
ded$ s_any, d_number, 0, 0
$out "d_number=" + s_any
$out s_dashes
ded$ s_any, d_root, 0, 0
d_dot = d_root * d_root
ded$ s_dot, d_dot, 0, 0
$out "d_root=" + s_any + " squared=" + s_dot
endi
dift d_process = 1
d_mod1 = d_tqdpart
d_mod2 = d_tqdone % d_root
d_mod3 = d_mod2 * d_tqdmult
d_mod4 = d_mod1 + d_mod3
d_mod5 = d_mod4 % d_root
d_mod6 = d_tqdmult * d_root + d_tqdone
$out s_dashes
d_mod1 = d_tqdpart
ded$ s_any, d_tqdpart, 0, 0
$out "d_tqdpart=" + s_any
dift d_mod1 > d_2to53: $out s_err
$out s_dashes
d_mod2 = d_tqdone % d_root
ded$ s_any, d_mod2, 0, 0
$out "d_tqdone % d_root=" + s_any
dift d_mod2 > d_2to53: $out s_err
$out s_dashes
d_mod3 = d_mod2 * d_tqdmult
ded$ s_any, d_mod3, 0, 0
$out "d_tqdmult * (d_tqdone % d_root)=" + s_any
dift d_mod3 > d_2to53: $out s_err
$out s_dashes
d_mod4 = d_mod1 + d_mod3
ded$ s_any, d_mod4, 0, 0
$out "d_tqdpart + d_tqdmult * (d_tqdone % d_root)=" + s_any
dift d_mod4 > d_2to53: $out s_err
$out s_dashes
d_mod5 = d_mod4 % d_root
ded$ s_any, d_mod5, 0, 0
s_dot = "(d_tqdpart + d_tqdmult * "
$app s_dot, "(d_tqdone % d_root)) % d_root=" + s_any
$out s_dot
dift d_mod5 > d_2to53: $out s_err
$out s_dashes
d_mod6 = d_tqdmult * d_root + d_tqdone
$out "d_max = d_root * d_tqdmult + d_tqdone"
ded$ s_any, d_mod6, 0, 0
$out "d_max=" + s_any
dift d_mod6 > d_2to53: $out s_err
endi
$inp s_any, "done"
ends sub_teaquad_mod_test
subr sub_teaquad_5tp39_analyze_an_a_file
'updated 2008/04/07
vari d_any, s_any, d_dot, s_dot
vari d_filebyte, s_record, s_prevrecord, s_inputfile
vari d_process, d_loop, d_good
vari s_hour, d_hour, d_prevhour
d_process = 1
dift d_process = 1
$inp s_inputfile, "enter input file ie. a5tp39x3.txt"
$ift s_inputfile = "*": dinc d_process
endi
d_filebyte = 1
d_loop = d_process
dwhi d_loop = 1
d_good = 1
fsip s_record, s_inputfile, d_filebyte
dift d_filebyte = 0
dinc d_loop
dinc d_good
endi
dift d_good = 1
$cut s_any, s_record, 1, 1
$ist d_any, s_any, "9"
dift d_any <> 1: dinc d_good
$lok d_dot, s_record, 1, ":"
dift d_dot < 3: dinc d_good
endi
dift d_good = 1
d_dot = d_dot - 2
$cut s_hour, s_record, d_dot, 2
$ist d_any, s_hour, "9"
dift d_any <> 1: dinc d_good
endi
dift d_good = 1
$tod d_hour, s_hour
d_any = d_prevhour + 1
dift d_any = 24: d_any = 0
dift d_any <> d_hour
$out s_prevrecord
$out s_record
$inp s_any, "not right"
$ift s_any = "*": dinc d_loop
endi
d_prevhour = d_hour
s_prevrecord = s_record
endi
endw
ends sub_teaquad_5tp39_analyze_an_a_file
subr sub_test_for_pnq30
'updated 2002/12/08
vari d_any, s_any, d_dot, s_dot, s_out
vari d_loop, d_quadprime, d_factor
vari d_good, d_number, s_number, d_count
d_loop = 1
dwhi d_loop = 1
s_out = "enter the first number or the PIVCOM of a PNQ30"
$inp s_number, s_out
$isd d_any, s_number
dift d_any <> 1
dinc d_loop
else
$tod d_number, s_number
dfac d_any, d_number
dift d_any = 2: d_number = d_number - 19
dg_pass1 = d_number
sub_pnq30_testshow
endi
endw
ends sub_test_for_pnq30
subr sub_pnq30_testshow
'updated 2002/12/08
vari d_any, s_any, d_dot, s_dot
vari d_quadprime, d_factor, d_pivcom, d_hastwinpivcom
vari d_good, d_number, s_number, d_count
d_quadprime = dg_pass1
d_hastwinpivcom = 2
d_count = 0
d_good = 1
dift d_good = 1
d_number = d_quadprime
dfac d_factor, d_number
dift d_factor = 1
dinc d_count
ded$ s_number, d_number, 20, 0
$out d_count + ". prime=" + s_number
else
dinc d_good
endi
endi
dift d_good = 1
d_number = d_quadprime + 2
dfac d_factor, d_number
dift d_factor = 1
dinc d_count
ded$ s_number, d_number, 20, 0
$out d_count + ". prime=" + s_number
else
dinc d_good
endi
endi
dift d_good = 1
d_number = d_quadprime + 6
dfac d_factor, d_number
dift d_factor = 1
dinc d_count
ded$ s_number, d_number, 20, 0
$out d_count + ". prime=" + s_number
else
dinc d_good
endi
endi
dift d_good = 1
d_number = d_quadprime + 8
dfac d_factor, d_number
dift d_factor = 1
dinc d_count
ded$ s_number, d_number, 20, 0
$out d_count + ". prime=" + s_number
else
dinc d_good
endi
endi
dift d_good = 1
d_number = d_quadprime + 30
dfac d_factor, d_number
dift d_factor = 1
dinc d_count
ded$ s_number, d_number, 20, 0
$out d_count + ". prime=" + s_number
else
dinc d_good
endi
endi
dift d_good = 1
d_number = d_quadprime + 32
dfac d_factor, d_number
dift d_factor = 1
dinc d_count
ded$ s_number, d_number, 20, 0
$out d_count + ". prime=" + s_number
else
dinc d_good
endi
endi
dift d_good = 1
d_number = d_quadprime + 36
dfac d_factor, d_number
dift d_factor = 1
dinc d_count
ded$ s_number, d_number, 20, 0
$out d_count + ". prime=" + s_number
else
dinc d_good
endi
endi
dift d_good = 1
d_number = d_quadprime + 38
dfac d_factor, d_number
dift d_factor = 1
dinc d_count
ded$ s_number, d_number, 20, 0
$out d_count + ". prime=" + s_number
else
dinc d_good
endi
endi
dift d_good = 1
'test for the twin pivcom
'pivcom was coined by Roger Hargrave in 2002
d_pivcom = d_quadprime + 19
d_number = d_pivcom - 1
dfac d_factor, d_number
dift d_factor = 1
d_number = d_pivcom + 1
dfac d_factor, d_number
dift d_factor = 1
ded$ s_any, d_pivcom, 0, 0
d_hastwinpivcom = 1
$out "pivcom is twin prime pivcom = " + s_any
endi
endi
endi
dg_pass1 = d_good
dg_pass2 = d_hastwinpivcom
ends sub_pnq30_testshow
subr sub_pnq30_test_quiet
'updated 2002/11/30
vari d_any, s_any, d_dot, s_dot
vari d_pnq30, d_factor
vari d_good, d_number
d_pnq30 = dg_pass1
d_good = 1
dift d_good = 1
d_number = d_pnq30
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
dto$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_pnq30 + 2
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
dto$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_pnq30 + 6
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
dto$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_pnq30 + 8
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
dto$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_pnq30 + 30
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
dto$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_pnq30 + 32
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
dto$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_pnq30 + 36
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
dto$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_pnq30 + 38
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
dto$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dg_pass1 = d_good
ends sub_pnq30_test_quiet
subr sub_pnq30_file_test
'updated 2003/05/24
vari d_any, s_any, d_dot, s_dot, s_out
vari s_filename, s_filedata, d_loop, d_big, d_error
vari s_number, d_number, d_count, d_byte, d_long, d_process
vari s_previous, d_previous, d_time1, d_time2
vari s_diff, d_diff, d_mindiff, d_atmindiff
vari d_onlypnq30, d_yestestfromgaps, d_quietpnq30
vari d_pivcom, d_ctadd1pivcom, d_ctsub1pivcom
vari s_line, d_twinct, d_testtwin
vari d_yestestsmallgaps, d_yestestlargegaps, d_testctpivcom
vari d_index, d_gcd, d_good, d_begnumber
d_process = 1
dift d_process = 1
$inp s_filename, "enter name of the file or FIXPRIME.EXP"
$ift s_filename = "*": dinc d_process
endi
dift d_process = 1
$trb s_filename, s_filename
$len d_any, s_filename
dift d_any = 0: s_filename = "FIXPRIME.EXP"
finp s_filedata, s_filename
$bes s_filedata, s_filedata
endi
dift d_process = 1
d_testtwin = 2
$inp s_any, "1 = check for twin pivcoms"
$ift s_any = "*": dinc d_process
$ift s_any = "1": d_testtwin = 1
endi
dift d_process = 1
d_yestestsmallgaps = 2
$inp s_any, "1 = test for small gaps"
$ift s_any = "1": d_yestestsmallgaps = 1
$ift s_any = "*": dinc d_process
endi
dift d_process = 1
d_yestestlargegaps = 2
$inp s_any, "1 = test for large gaps"
$ift s_any = "1": d_yestestlargegaps = 1
$ift s_any = "*": dinc d_process
endi
dift d_process = 1
d_onlypnq30 = 2
$inp s_any, "1 = test only PNQ30s"
$ift s_any = "1": d_onlypnq30 = 1
$ift s_any = "*": dinc d_process
endi
dift d_process = 1
d_quietpnq30 = 2
$inp s_any, "1 = quiet pnq30"
$ift s_any = "1": d_quietpnq30 = 1
$ift s_any = "*": dinc d_process
endi
dift d_process = 1
d_yestestfromgaps = 2
$inp s_any, "1 = test from gaps"
$ift s_any = "1": d_yestestfromgaps = 1
$ift s_any = "*": dinc d_process
endi
dift d_process = 1
d_testctpivcom = 2
$inp s_any, "1 = test ctpivcom"
$ift s_any = "1": d_testctpivcom = 1
$ift s_any = "*": dinc d_process
endi
dift d_process = 1
d_begnumber = 0
$inp s_any, "minimum number to begin with, default 0"
$isd d_any, s_any
dift d_any = 1: $tod d_begnumber, s_any
$ift s_any = "*": dinc d_process
endi
dift d_process = 1
$len d_long, s_filedata
$out "length=" + d_long
dift d_long < 1: dinc d_process
endi
dift d_process = 1
dsec d_time1
dift d_onlypnq30 <> 1
'test PNQ30: to see if correct
sg_pass1 = s_filedata
sub_pnq30_string_test
endi
d_ctadd1pivcom = 0
d_ctsub1pivcom = 0
d_index = 1
dpow d_mindiff, 10, 15
d_previous = 0
d_atmindiff = 0
d_twinct = 0
endi
dift d_process = 1
d_count = 0
dpow d_big, 10, 9
$cup s_filedata, s_filedata
d_loop = 1
dwhi d_loop = 1
d_good = 1
$lok d_byte, s_filedata, 1, "PNQ30="
dift d_byte = 0
dinc d_loop
dinc d_good
endi
dift d_good = 1
'get the line to output below
$cut s_line, s_filedata, d_byte, 70
d_byte = d_byte + 6
'eliminate the 'PNQ30='
$cut s_filedata, s_filedata, d_byte, d_big
$trb s_filedata, s_filedata
'find the blank at the end of the number
$lok d_byte, s_filedata, 1, " "
'get the number into a string
$cut s_number, s_filedata, 1, d_byte
'prep the string for next look
$cut s_filedata, s_filedata, d_byte, d_big
'do we have a number
$trb s_number, s_number
$isd d_good, s_number
endi
dift d_good = 1
'we have a number
$tod d_number, s_number
'it cannot be smaller than d_begnumber
dift d_number < d_begnumber: dinc d_good
endi
dift d_good = 1
ded$ s_number, d_number, 0, 0
$out s_number
dift d_quietpnq30 = 1
dg_pass1 = d_number
sub_pnq30_test_quiet
d_good = dg_pass1
dift d_good <> 1
$out "not PNQ30=" + s_number
$inp s_any, "return"
endi
else
dg_pass1 = d_number
sub_pnq30_testshow
d_good = dg_pass1
dift d_good <> 1
$out "not PNQ30=" + s_number
$inp s_any, "return"
endi
endi
endi
dift d_good = 1
dinc d_count
$out d_count + ":PNQ30=" + s_number
dift d_testctpivcom = 1
'test to see if TWIN PIVCOM
dg_pass1 = d_number
sub_test_ctpivcom
endi
dift d_yestestfromgaps = 1
'what about the gap to the previous prime
dg_pass1 = d_number
dg_pass2 = -2
sub_find_next_prime
'what about the gap to the next prime
dg_pass1 = d_number + 38
dg_pass2 = 2
sub_find_next_prime
endi
'pivcom was coined by Roger Hargrave in 2002
'pivcom = pivotal composite = d_number + 19
d_pivcom = d_number + 19
'is the pivcom the pivcom of a twin prime set
d_dot = d_pivcom - 1
dfac d_any, d_dot
'how many pivcom sub 1 are prime
dift d_any = 1: dinc d_ctsub1pivcom
d_dot = d_pivcom + 1
dfac d_dot, d_dot
'how many pivcom add 1 are prime
dift d_dot = 1: dinc d_ctadd1pivcom
d_dot = d_any + d_dot
dift d_dot = 2
'we have a twin pivcom
dinc d_twinct
$out s_line
s_out = d_twinct + ". TWIN PIVCOM at PNQ30="
$app s_out, s_number
dift d_testtwin = 1
$lok d_any, s_line, 1, "PIVCOM"
dift d_any = 0: $inp s_any, s_out
else
$out s_out
endi
else
'we do not have a twin pivcom
$lok d_any, s_line, 1, "PIVCOM"
dift d_any > 0
$out s_number
$inp s_any, "not TWIN PIVCOM but marked as one"
endi
endi
'find difference from the previous PNQ30
d_diff = d_number - d_previous
ded$ s_diff, d_diff, 0, 0
dift d_diff < d_mindiff
d_mindiff = d_diff
d_atmindiff = d_previous
endi
dift d_diff < 1000
ded$ s_any, d_previous, 0, 0
$out s_any
ded$ s_any, d_number, 0, 0
$out s_any
$out s_diff
$inp s_any, "difference too small"
endi
d_any = d_diff / 210
d_dot = d_diff \ 210
dift d_any <> d_dot
ded$ s_any, d_any, 0, 0
$out "d_diff / 210=" + s_any
ded$ s_dot, d_dot, 0, 0
$out "d_diff \ 210=" + s_dot
$inp s_any, "bad divide by 210"
endi
'output differences
s_out = "diff=" + s_diff
ded$ s_any, d_mindiff, 0, 0
$app s_out, ", mindiff=" + s_any
ded$ s_any, d_atmindiff, 0, 0
$app s_out, ", min at=" + s_any
$out s_out
dift d_yestestlargegaps = 1
'test for a large gap
dpow d_any, 10, 10
dift d_diff >= d_any
s_out = "large gap=" + s_diff + " at "
$app s_out, s_previous + " & " + s_number
$inp s_any, s_out
endi
endi
dift d_yestestsmallgaps = 1
'test for a small gap
dpow d_any, 10, 6
dift d_diff <= d_any
s_out = "small gap=" + s_diff + " at "
$app s_out, s_previous + " & " + s_number
$inp s_any, s_out
endi
endi
d_previous = d_number
s_previous = s_number
endi
endw
endi
ded$ s_any, d_ctsub1pivcom, 0, 0
$out "prime count of pivcom - 1 = " + s_any
ded$ s_any, d_ctadd1pivcom, 0, 0
$out "prime count of pivcom + 1 = " + s_any
ded$ s_any, d_count, 0, 0
$out "PNQ30 count=" + s_any
dsec d_time2
d_any = d_time2 - d_time1
ded$ s_any, d_any, 0, 0
$out "seconds=" + s_any
$inp s_any, "done"
ends sub_pnq30_file_test
subr sub_test_ctpivcom
'updated 2003/01/26
'test ctpivcom for mod of 11, 13, 17, 19
vari d_any, s_any, d_dot, s_dot, s_out
vari d_pnq30, s_pnq30, d_ctpivcom, s_ctpivcom
d_pnq30 = dg_pass1
ded$ s_pnq30, d_pnq30, 0, 0
d_ctpivcom = d_pnq30 + 19 \ 210
ded$ s_ctpivcom, d_ctpivcom, 0, 0
dfac d_any, d_ctpivcom
ded$ s_any, d_any, 0, 0
s_out = "pnq30=" + s_pnq30
$app s_out, " ctpivcom=" + s_ctpivcom
$app s_out, " divisor=" + s_any
$out s_out
d_any = d_ctpivcom % 11
s_out = "%11=" + d_any
d_any = d_ctpivcom % 13
$app s_out, ", %13=" + d_any
d_any = d_ctpivcom % 17
$app s_out, ", %17=" + d_any
d_any = d_ctpivcom % 19
$app s_out, ", %19=" + d_any
$inp s_any, s_out
ends sub_test_ctpivcom
subr sub_pnq30_string_test
'updated 2002/01/26
'test PNQ30: to see if correct
vari d_any, s_any, d_dot, s_dot, s_out
vari d_loop, d_number, s_number, s_string
vari d_byte, d_count, d_previous
vari d_diff, s_diff, d_maxdiff, s_max
s_string = sg_pass1
sg_pass1 = sg_nothing
$cup s_string, s_string
'look for PNQ30:
d_count = 0
d_byte = 1
d_loop = 1
dwhi d_loop = 1
$lok d_byte, s_string, d_byte, "PNQ30: "
dift d_byte = 0
$out "PNQ30: count=" + d_count
dinc d_loop
else
d_dot = d_byte + 7
$cut s_dot, s_string, d_dot, 30
$trb s_dot, s_dot
$lok d_any, s_dot, 1, " "
$cut s_number, s_dot, 1, d_any
$trb s_number, s_number
$isd d_any, s_number
dift d_any = 1
dinc d_count
$tod d_number, s_number
'test to see if pnq30
dg_pass1 = d_number
sub_pnq30_testshow
d_any = dg_pass1
dift d_any = 1
$out "PNQ30: " + s_number
else
s_out = "not PNQ30=" + s_number
$inp s_any, s_out
endi
else
$out "bad number=" + s_number
endi
endi
dinc d_byte
endw
$inp s_any, "PNQ30: tested, count=" + d_count
ends sub_pnq30_string_test
subr sub_find_next_prime
'updated 2003/02/02
'find the next prime number after dg_pass1
'in direction of dg_pass2
vari d_any, s_any, d_dot, s_dot, s_out
vari d_loop, d_begnumber, d_testnumber
vari d_divisor, d_prime, d_gap, d_delta
'get the beginning number and the delta
d_begnumber = dg_pass1
d_delta = dg_pass2
'd_delta can be +2 or -2
d_testnumber = d_begnumber + d_delta
d_prime = 1
d_loop = 1
dwhi d_loop = 1
dfac d_divisor, d_testnumber
dift d_divisor = 1
d_prime = d_testnumber
dinc d_loop
else
d_testnumber = d_testnumber + d_delta
endi
endw
ded$ s_any, d_begnumber, 0, 0
ded$ s_dot, d_prime, 0, 0
s_out = "begin=" + s_any + ", next prime=" + s_dot
d_gap = d_prime - d_begnumber
ded$ s_any, d_gap, 0, 0
$app s_out, ", gap=" + s_any
$out s_out
'stop if absolute value of gap is large
dabs d_any, d_gap
dift d_any >= 200: $inp s_any, "gap to next prime"
dg_pass1 = d_gap
ends sub_find_next_prime
subr sub_5TP39_clusters
'updated 2004/02/22
vari d_any, s_any, d_dot, s_dot, s_out
vari s_filename, s_filedata, s_line, d_loop, d_big, d_good
vari d_diff, d_minimum, d_maximum
vari d_clusterct, d_index, d_number1, d_number2, d_show
vari s_number, d_count, d_byte, d_long, d_process
d_process = 1
dift d_process = 1
d_clusterct = 5
$inp s_any, "enter number per cluster"
$isd d_any, s_any
dift d_any = 1: $tod d_clusterct, s_any
dpow d_maximum, 10, 13
$inp s_any, "enter number for maximum spread"
$isd d_any, s_any
dift d_any = 1: $tod d_maximum, s_any
endi
dift d_process = 1
$inp s_filename, "enter name of the file or fix5tp39.exp"
$ift s_filename = "*": dinc d_process
endi
dift d_process = 1
'get the file into s_filedata
$trb s_filename, s_filename
$len d_any, s_filename
dift d_any = 0: s_filename = "fix5tp39.exp"
finp s_filedata, s_filename
$bes s_filedata, s_filedata
endi
dift d_process = 1
$len d_long, s_filedata
$out "length=" + d_long
dift d_long < 1: dinc d_process
endi
dift d_process = 1
arrz
d_index = 1
d_count = 0
dpow d_big, 10, 9
$cup s_filedata, s_filedata
d_loop = 1
dwhi d_loop = 1
d_good = 1
$lok d_byte, s_filedata, 1, "5TP39="
dift d_byte = 0
dinc d_loop
dinc d_good
endi
dift d_good = 1
'get the line to output below
$cut s_line, s_filedata, d_byte, 50
d_byte = d_byte + 6
'eliminate the '5TP39='
$cut s_filedata, s_filedata, d_byte, d_big
$trb s_filedata, s_filedata
'find the blank at the end of the number
$lok d_byte, s_filedata, 1, " "
'get the number into a string
$cut s_number, s_filedata, 1, d_byte
'prep the string for next look
$cut s_filedata, s_filedata, d_byte, d_big
'do we have a number
$trb s_number, s_number
$isd d_good, s_number
endi
dift d_good = 1
'we have a 5TP39
$tod d_number1, s_number
dtoi d_index, d_number1
endi
dinc d_index
dift d_index > 2000: dinc d_loop
endw
dpow d_minimum, 10, 15
d_index = 1
d_loop = 1
dwhi d_loop = 1
itod d_number1, d_index
d_dot = d_index + d_clusterct
itod d_number2, d_dot
d_diff = d_number2 - d_number1
dabs d_diff, d_diff
d_show = 2
dift d_diff < d_maximum: d_show = 1
d_any = d_number1 * d_number2
dift d_any = 0
dinc d_show
dinc d_loop
endi
dift d_show = 1
ded$ s_any, d_maximum, 0, 0
s_out = "cluster count=" + d_clusterct
$app s_out, ", maximum diff=" + s_any
$out s_out
ded$ s_any, d_number1, 0, 0
s_out = d_index + ". " + s_any
$out s_out
ded$ s_any, d_number2, 0, 0
s_out = d_dot + ". " + s_any
$out s_out
ded$ s_any, d_diff, 0, 0
s_out = "diff=" + s_any
$out s_out
$inp s_any, "more"
endi
dinc d_index
dift d_index > 2000: dinc d_loop
endw
endi
$inp s_any, "done"
ends sub_5TP39_clusters
subr sub_teaquad_5tp39_teapro_loop
'updated 2007/12/08, 2007/12/07, 2007/12/06, 2007/12/05
vari d_any, s_any, d_dot, s_dot
vari d_teaquadpart, d_teaquadmult, d_teaquadone
vari s_number, d_factor
vari d_loop, d_good, d_sec1, d_sec2, d_sec3
d_teaquadmult = 0
d_teaquadpart = 101
d_loop = 1
dwhi d_loop = 1
d_good = 1
dift d_good = 1
$out "1= 10,352,983,611,791"
$out "2= 100,749,831,367,481"
$out "3= 1,000,946,235,399,161"
$out "4= 10,011,767,333,774,411"
$out "5= 100,008,118,644,774,251"
$out "6= 1,000,012,759,669,197,941"
$inp s_any, "enter number"
$ift s_any = "*": dinc d_good
$ift s_any = "1": s_any = "10,352,983,611,791"
$ift s_any = "2": s_any = "100,749,831,367,481"
$ift s_any = "3": s_any = "1,000,946,235,399,161"
$ift s_any = "4": s_any = "10,011,767,333,774,411"
$ift s_any = "5": s_any = "100,008,118,644,774,251"
$ift s_any = "6": s_any = "1,000,012,759,669,197,941"
endi
dift d_good = 1
s_number = s_any
$out "number=" + s_number
endi
dift d_good = 1
sg_pass1 = s_number
sub_teaquad_from_string
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
s_any = "teaquadmult=" + d_teaquadmult
$app s_any, " teaquadpart=" + d_teaquadpart
$out s_any
endi
dift d_good = 1
'use DFAK
dg_pass1 = d_teaquadpart
dg_pass2 = d_teaquadmult
dsec d_sec1
dfak d_factor, d_teaquadpart, d_teaquadmult
dsec d_sec2
d_sec3 = d_sec2 - d_sec1
$out "DFAK factor=" + d_factor + " sec=" + d_sec3
dg_pass1 = d_teaquadpart
dg_pass2 = d_teaquadmult
dsec d_sec1
sub_5tp39_test_teapro_loop01
dsec d_sec2
d_factor = dg_pass1
d_sec2 = d_sec2 - d_sec1
$out "loop factor=" + d_factor + " sec=" + d_sec2
d_any = d_sec2 / d_sec3
$out "ratio=" + d_any
$inp s_any, "more"
$ift s_any = "*": dinc d_good
endi
d_loop = d_good
endw
ends sub_teaquad_5tp39_teapro_loop
subr sub_5TP39_test_teapro_loop01
'updated 2007/12/08, 2007/12/05, 2004/01/23
vari d_any, s_any, d_dot, s_dot
vari d_teaquadpart, d_teaquadmult, d_teaquadone
vari d_divisor, d_root, d_modulus, d_mod1, d_mod2, d_result
vari d_loop, d_count
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
d_teaquadone = 10 ^ 15
d_any = d_teaquadone * d_teaquadmult + d_teaquadpart
dpow d_root, d_any, 0.5
'd_modulus = fmod(fmod(d_teaquadpart, d_divisor)
'+ d_teaquadmult * fmod(d_teaquadone, d_divisor), d_divisor);
d_result = 1
d_divisor = 3
d_loop = 1
gtag tag_top
dinc d_count
d_mod1 = d_teaquadpart % d_divisor
d_mod2 = d_teaquadone % d_divisor
d_modulus = d_teaquadmult * d_mod2 + d_mod1 % d_divisor
'$out "d_divisor=" + d_divisor + " d_mod1=" + d_mod1 + " d_mod2=" + d_mod2
'$out "d_modulus=" + d_modulus
dift d_modulus = 0
dinc d_loop
d_result = d_divisor
endi
d_divisor = d_divisor + 2
dift d_divisor <= d_root: goto tag_top
ded$ s_any, d_count, 0, 0
$out "count=" + s_any
dg_pass1 = d_result
ends sub_5TP39_test_teapro_loop01
subr sub_5TP39_test_teapro_loop99
'updated 2007/12/05, 2004/01/23
vari d_any, s_any, d_dot, s_dot
vari d_teaquadpart, d_teaquadmult, d_teaquadone
vari d_divisor, d_root, d_modulus, d_mod1, d_mod2, d_result
vari d_loop, d_count
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
d_teaquadone = 10 ^ 15
d_any = d_teaquadone * d_teaquadmult + d_teaquadpart
dpow d_root, d_any, 0.5
'd_modulus = fmod(fmod(d_teaquadpart, d_divisor)
'+ d_teaquadmult * fmod(d_teaquadone, d_divisor), d_divisor);
d_result = 1
d_divisor = 3
d_loop = 1
gtag tag_top
dinc d_count
d_mod1 = d_teaquadpart % d_divisor
d_mod2 = d_teaquadone % d_divisor
d_modulus = d_teaquadmult * d_mod2 + d_mod1 % d_divisor
'$out "d_divisor=" + d_divisor + " d_mod1=" + d_mod1 + " d_mod2=" + d_mod2
'$out "d_modulus=" + d_modulus
dift d_modulus = 0
dinc d_loop
d_result = d_divisor
endi
d_divisor = d_divisor + 2
dift d_divisor > d_root: goto tag_end
goto tag_top
gtag tag_end
ded$ s_any, d_count, 0, 0
$out "count=" + s_any
dg_pass1 = d_result
ends sub_5TP39_test_teapro_loop99
subr sub_5TP39_test_quiet
'updated 2004/03/21
vari d_any, s_any, d_dot, s_dot
vari d_5TP39, d_factor
vari d_good, d_number
d_5TP39 = dg_pass1
d_good = 1
dift d_good = 1
d_number = d_5TP39
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any + ", factor=" + d_factor
endi
endi
dift d_good = 1
d_number = d_5TP39 + 2
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any + ", factor=" + d_factor
endi
endi
dift d_good = 1
d_number = d_5TP39 + 6
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any + ", factor=" + d_factor
endi
endi
dift d_good = 1
d_number = d_5TP39 + 8
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any + ", factor=" + d_factor
endi
endi
dift d_good = 1
d_number = d_5TP39 + 18
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any + ", factor=" + d_factor
endi
endi
dift d_good = 1
d_number = d_5TP39 + 20
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any + ", factor=" + d_factor
endi
endi
dift d_good = 1
d_number = d_5TP39 + 30
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any + ", factor=" + d_factor
endi
endi
dift d_good = 1
d_number = d_5TP39 + 32
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any + ", factor=" + d_factor
endi
endi
dift d_good = 1
d_number = d_5TP39 + 36
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any + ", factor=" + d_factor
endi
endi
dift d_good = 1
d_number = d_5TP39 + 38
dfac d_factor, d_number
dift d_factor <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any + ", factor=" + d_factor
endi
endi
dg_pass1 = d_good
ends sub_5TP39_test_quiet
subr sub_5TP39_test_simple
'updated 2003/04/10
'use sub_prime_test_using_prime_array rather than dfac
vari d_any, s_any, d_dot, s_dot
vari d_5TP39, d_sec1, d_sec2
vari d_good, d_number
d_5TP39 = dg_pass1
dsec d_sec1
d_good = 1
dift d_good = 1
d_number = d_5TP39
dg_pass1 = d_number
sub_prime_test_using_prime_array
dift dg_pass1 <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_5TP39 + 2
dg_pass1 = d_number
sub_prime_test_using_prime_array
dift dg_pass1 <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_5TP39 + 6
dg_pass1 = d_number
sub_prime_test_using_prime_array
dift dg_pass1 <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_5TP39 + 8
dg_pass1 = d_number
sub_prime_test_using_prime_array
dift dg_pass1 <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_5TP39 + 18
dg_pass1 = d_number
sub_prime_test_using_prime_array
dift dg_pass1 <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_5TP39 + 20
dg_pass1 = d_number
sub_prime_test_using_prime_array
dift dg_pass1 <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_5TP39 + 30
dg_pass1 = d_number
sub_prime_test_using_prime_array
dift dg_pass1 <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_5TP39 + 32
dg_pass1 = d_number
sub_prime_test_using_prime_array
dift dg_pass1 <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_5TP39 + 36
dg_pass1 = d_number
sub_prime_test_using_prime_array
dift dg_pass1 <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dift d_good = 1
d_number = d_5TP39 + 38
dg_pass1 = d_number
sub_prime_test_using_prime_array
dift dg_pass1 <> 1
dinc d_good
ded$ s_any, d_number, 0, 0
$out "not prime=" + s_any
endi
endi
dsec d_sec2
d_any = d_sec2 - d_sec1
$out "seconds=" + d_any
dg_pass1 = d_good
ends sub_5TP39_test_simple
subr sub_teaquad_primes_1101
'updated 2008/11/09, 2008/10/19, 2008/10/10, 2007/03/28
'2007/03/19, 2007/03/05, 2007/03/02, 2007/02/27, 2007/02/25
'2006/11/30, 2006/11/26, 2006/11/25, 2006/04/08, 2002/05/02
'find primes of the form of 101
vari d_any, s_any, d_dot, s_dot, s_out
vari d_loop, d_number, s_number, d_mode
vari d_firstdigits, d_countofzeros, d_lastdigit, d_primect
vari d_factor, s_factor, d_totseconds
vari d_process, d_seconds, d_yfile, s_filename
vari d_teaquadpart, d_teaquadmult
d_process = 1
dift d_process = 1
d_mode = 2
$inp s_any, "2=2 digit, 3=3 digit above 1E15"
$ift s_any = "*": dinc d_process
$ift s_any = "3": d_mode = 3
endi
dift d_process = 1
s_filename = "prim1101.txt"
d_yfile = 2
$inp s_any, "1=save to file=" + s_filename
$ift s_any = "*": dinc d_process
$ift s_any = "1": d_yfile = 1
endi
dift d_process = 1
dift d_yfile = 1
flen d_any, s_filename
dift d_any >= 0
$inp s_any, "1=purge " + s_filename
$ift s_any = "*": dinc d_process
$ift s_any = "1": fdel d_any, s_filename
endi
endi
endi
dift d_mode = 2
d_firstdigits = 10
d_countofzeros = 1
else
d_firstdigits = 1
d_countofzeros = 14
endi
d_lastdigit = 1
dsec d_totseconds
d_primect = 0
d_loop = d_process
dwhi d_loop = 1
'construct the number
$ch$ s_any, "0", d_countofzeros
s_number = d_firstdigits + s_any + "1"
'change from s_number to d_teaquadpart, d_teaquadmult
sg_pass1 = s_number
sub_teaquad_from_string
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
dsec d_seconds
'test for prime single
dfak d_factor, d_teaquadpart, d_teaquadmult
dsec d_any
d_seconds = d_any - d_seconds
dift d_factor = 1: dinc d_primect
'change to edited string
dg_pass1 = d_teaquadpart
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_number = sg_pass1
ded$ s_factor, d_factor, 0, 0
s_out = d_primect + "." + " " + s_number
$app s_out, ", factor=" + s_factor
$app s_out, ", sec=" + d_seconds
dift d_factor = 1
$out s_out
dift d_yfile = 1: fapp d_any, s_filename, s_out
else
$sho s_out
endi
'increment
'max is 1,000,000,000,000,000,000,001
dift d_mode = 2
dinc d_firstdigits
dift d_firstdigits > 99
d_firstdigits = 10
dinc d_countofzeros
endi
dift d_countofzeros >= 19
'max is 1,000 quintillion and one
dinc d_loop
endi
else
'three digits above 1E15
dinc d_firstdigits
dift d_firstdigits > 999: dinc d_loop
endi
endw
'construct the number
$ch$ s_any, "0", d_countofzeros
s_number = d_firstdigits + s_any + "1"
'change from s_number to d_teaquadpart, d_teaquadmult
sg_pass1 = s_number
sub_teaquad_from_string
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
'change to edited string
dg_pass1 = d_teaquadpart
dg_pass2 = d_teaquadmult
sub_teaquad_to_string
s_number = sg_pass1
s_out = "end=" + s_number
$out s_out
fapp d_any, s_filename, s_out
$dat s_dot
dsec d_any
d_totseconds = d_any - d_totseconds
s_out = s_dot + ", total secs=" + d_totseconds
$out s_out
fapp d_any, s_filename, s_out
sub_path_prog_memory
$inp s_any, "done"
ends sub_teaquad_primes_1101
subr sub_primes_time_test
'updated 2002/12/30
'test every 10^14th number for time
vari d_any, s_any, d_dot, s_dot, s_out
vari d_time1, d_time2, d_time3, d_timehold, d_diff
vari d_big, d_test, d_factor, d_number, d_increment
vari d_many
$inp s_dot, "1= to 10^13, 2= to 10^14, 3= to 10^15"
$ift s_dot = "1"
dpow d_big, 10, 13
d_big = d_big + 10
dpow d_increment, 10, 11
d_increment = d_increment * 5
endi
$ift s_dot = "2"
dpow d_big, 10, 14
d_big = d_big + 10
dpow d_increment, 10, 12
d_increment = d_increment * 5
endi
$ift s_dot = "3"
dpow d_big, 10, 15
d_big = d_big + 10
dpow d_increment, 10, 13
d_increment = d_increment * 5
endi
d_many = 1
$inp s_any, "how many times to test each"
$isd d_any, s_any
dift d_any = 1: $tod d_many, s_any
d_many = d_many \ 1
$out "number of times to test each=" + d_many
d_timehold = 0
d_number = 1
dwhi d_number < d_big
d_test = d_number - 2
d_factor = 2
dwhi d_factor <> 1
d_test = d_test + 2
dfac d_factor, d_test
endw
'do d_many of them to make the test more accurate
d_time3 = 0
d_dot = 1
dwhi d_dot <= d_many
dsec d_time1
dfac d_factor, d_test
dsec d_time2
d_time3 = d_time3 + d_time2 - d_time1
dinc d_dot
endw
d_time3 = d_time3 / d_many
d_diff = d_time3 - d_timehold
ded$ s_any, d_test, 0, 0
$out s_any + " " + d_time3 + ", diff=" + d_diff
d_timehold = d_time3
d_number = d_increment + d_number
endw
$inp s_any, "done"
ends sub_primes_time_test
subr sub_filename
'updated 2002/05/04
'get an output filename into sg_fileout
vari d_any, s_any, d_dot, s_dot
dran d_any
dpow d_dot, 99999, 3
d_any = d_dot * d_any
s_any = d_any
$lok d_dot, s_any, 1, "."
dift d_dot > 0: $del s_any, d_dot, 1
$ch$ s_dot, "0", 10
$app s_any, s_dot
$cut s_any, s_any, 3, 7
sg_fileout = "T" + s_any + ".txt"
ends sub_filename
subr sub_collect_5tp39xx
'updated 2009/06/05, 2009/06/03
'2009/05/12, 2009/03/03, 2009/02/28, 2009/02/26, 2009/02/01
'2009/01/29, 2009/01/24, 2008/12/22, 2008/10/20, 2008/04/15,
'2008/04/10, 2008/02/05, 2007/08/26, 2007/08/23, 2007/08/22
'2007/07/31, 2007/07/11, 2007/07/01, 2007/06/27, 2007/06/26
vari d_any, s_any, d_dot, s_dot
vari s_letter, d_process, d_prevcount, s_2code, d_type
vari s_fileout, s_filein, s_alldata, s_data, s_names
vari d_loop, s_crlf, d_num, d_count, d_pnumct, d_tnumct
d_process = 1
dift d_process = 1
$inp s_any, "a, b, p or t files"
$ift s_any = "*": dinc d_process
$tlo s_any, s_any
s_letter = "b"
$ift s_any = "a": s_letter = s_any
$ift s_any = "p": s_letter = s_any
$ift s_any = "t": s_letter = s_any
endi
dift d_process = 1
d_type = 3
$inp s_any, "1=below 250E15, 2=QTP20, 3=all"
$ift s_any = "*": dinc d_process
$isd d_any, s_any
dift d_any = 1: $tod d_type, s_any
endi
dift d_process = 1
dch$ s_crlf, 13, 1
dch$ s_any, 10, 1
$app s_crlf, s_any
s_names = "a1,a2,h1,h2,h3,h4,"
$app s_names, "n0,n1,n2,n3,n4,n5,"
$app s_names, "j1,j2,d1,d2,d3,"
$app s_names, "r1,r2,s1,s2,s3,s4,s5,s6,s7,"
$app s_names, "x1,x2,x3,x4,x5,x6,"
$app s_names, "y0,y1,y2,y3,y4,y5,y6,y7,y8,y9,"
$app s_names, "w0,w1,w2,w3,w4,w5,w6,w7,w8,w9,"
'get count of previous output file
s_fileout = s_letter + "_5tp39" + ".txt"
finp s_dot, s_fileout
$cnt d_prevcount, s_dot, "5TP39"
fdel d_any, s_fileout
s_alldata = sg_nothing
endi
d_tnumct = 0
d_num = 1
d_loop = 2
dift d_process = 1
dift d_type = 1: d_loop = 1
dift d_type = 3: d_loop = 1
endi
dwhi d_loop = 1
$par s_2code, s_names, ",", d_num
$trb s_2code, s_2code
$len d_any, s_2code
$ift d_any = 2
dinc d_count
'5tp39 files
s_filein = s_letter + "5tp39" + s_2code + ".txt"
finp s_data, s_filein
$cnt d_pnumct, s_data, "5TP39"
d_tnumct = d_tnumct + d_pnumct
dift d_pnumct > 0
$len d_any, s_data
s_any = d_count + " " + s_filein + " " + d_any
$app s_any, " pnumct=" + d_pnumct
$out s_any
s_any = "file=" + s_filein + s_crlf + s_data
$app s_any, "file=" + s_filein + s_crlf
dift d_pnumct > 0: $app s_alldata, s_any
endi
else
dinc d_loop
endi
dinc d_num
endw
'qtp20s
d_num = 1
d_loop = 2
dift d_process = 1
dift d_type = 2: d_loop = 1
dift d_type = 3: d_loop = 1
endi
dwhi d_loop = 1
$par s_2code, s_names, ",", d_num
$trb s_2code, s_2code
$len d_any, s_2code
$ift d_any = 2
dinc d_count
'qtp20 files
s_filein = "qtp20" + s_2code + s_letter + ".txt"
finp s_data, s_filein
$cnt d_pnumct, s_data, "5TP39"
d_tnumct = d_tnumct + d_pnumct
dift d_pnumct > 0
$len d_any, s_data
s_any = d_count + " " + s_filein + " " + d_any
$app s_any, " pnumct=" + d_pnumct
$out s_any
s_any = "file=" + s_filein + s_crlf + s_data
$app s_any, "file=" + s_filein + s_crlf
dift d_pnumct > 0: $app s_alldata, s_any
endi
else
dinc d_loop
endi
dinc d_num
endw
fout d_any, s_fileout, s_alldata
s_any = "file=" + s_fileout + " length=" + d_any
$app s_any, " ct=" + d_count + " totct=" + d_tnumct
$out s_any
d_any = d_tnumct - d_prevcount
$out "previous count=" + d_prevcount + ", diff=" = d_any
$inp s_any, "return"
ends sub_collect_5tp39xx
subr sub_path_prog_memory
'updated 2007/12/22, 2007/12/01, 2007/11/12
'2006/09/25, 2006/09/04, 2006/08/29, 2006/04/23, 2005/10/08
vari s_out, s_path, d_memory, s_memory
vari s_date, s_version, d_lines, s_lines
$sys s_version, 3
$out s_version
$out sg_build
$sys s_path, 1
$out "Path: " + s_path
$dat s_date
$cut s_date, s_date, 1, 20
dsys d_memory, 1
ded$ s_memory, d_memory, 0, 0
dsys d_lines, 2
ded$ s_lines, d_lines, 0, 0
s_out = "memory=" + s_memory + ", lines=" + s_lines
$app s_out, ", date=" + s_date
$out s_out
ends sub_path_prog_memory
subr sub_dfac_speed_test
'updated 2003/09/29
vari d_any, s_any, d_dot, s_dot
vari d_sec1, d_sec2, d_maxct, d_count, d_number
$out "1 = 999,090,480,521,891 prime"
$out "2 = 999,997,874,844,049 has square root= 31,622,743"
$inp s_any, "pick one"
$ift s_any = "1"
$tod d_number, "999,090,480,521,891"
else
$tod d_number, "999,997,874,844,049"
endi
$out "number is = " + d_number
d_maxct = 10
$inp s_any, "how many times, 10 default"
$isd d_any, s_any
dift d_any = 1: $tod d_maxct, s_any
d_count = 0
dsec d_sec1
dwhi d_count <= d_maxct
dfac d_dot, d_number
dinc d_count
endw
dsec d_sec2
d_any = d_sec2 - d_sec1
$out "factor=" + d_dot
$inp s_any, "time=" + d_any
ends sub_dfac_speed_test
subr sub_xyz_math
'updated 2007/09/12, 2007/04/11, 2006/05/04
'2006/04/08, 2005/11/05, 2005/08/20, 2005/06/11, 2004/04/21
'solve a multi number math expression in sg_pass1
'the format is: x=123*567+4.6 etc or y=123*567+4.6
'put answer in dg_xvalue, dg_yvalue, dg_zvalue
vari d_any, s_any, d_dot, s_dot, s_out, s_lok
vari d_good, d_long, d_loop, d_error, s_dashes
vari s_line, d_number, s_operator, d_answer, s_xyzvalue
vari s_work, d_byte, s_term, d_process, s_command, s_aster
s_command = sg_pass1
$tup s_line, s_command
$ch$ s_dashes, "-", 70
$ift s_line = "XYZ": s_line = "X=X"
'do we have x=, or y= or z=
d_process = 2
$cut s_any, s_line, 1, 2
$ift s_any = "X=": d_process = 1
$ift s_any = "Y=": d_process = 1
$ift s_any = "Z=": d_process = 1
dwhi d_process = 1
'x is in dg_xvalue, y is in dg_yvalue, z in dg_zvalue
'remove commas and blanks
$swp s_line, ",", sg_nothing
$swp s_line, " ", sg_nothing
'colon delimited into sg_xyzmath
'which holds all xyz commands to show later
$app sg_xyzmath, s_line + ":"
'remove the x= or y= at the beginning in s_work
$cut s_work, s_line, 3, 100
$cut s_any, s_work, 1, 1
'put on + if needed
$ift s_any <> "+"
$ift s_any <> "-": s_work = "+" + s_work
endi
$app s_work, ";"
$len d_long, s_work
d_error = 2
d_byte = 2
d_answer = 0
d_loop = 1
dwhi d_loop = 1
'do we have the next operator in d_byte
$cut s_dot, s_work, d_byte, 1
s_lok = "+-*/\%^@;"
$lok d_any, s_lok, 1, s_dot
dift d_any > 0
'we have the location of the next operator
d_long = d_byte - 2
'the current operator is in 1
'get the number or x,y,z
$cut s_term, s_work, 2, d_long
'is this string a number
$isd d_good, s_term
dift d_good = 1
$tod d_number, s_term
else
'if X then use the xvalue from previous
$ift s_term = "X"
d_number = dg_xvalue
d_good = 1
endi
$ift s_term = "Y"
d_number = dg_yvalue
d_good = 1
endi
$ift s_term = "Z"
d_number = dg_zvalue
d_good = 1
endi
dift d_good <> 1: d_error = 1
endi
dift d_good = 1
'get current operator
$cut s_operator, s_work, 1, 1
$ift s_operator = "+"
d_answer = d_answer + d_number
endi
$ift s_operator = "-"
d_answer = d_answer - d_number
endi
$ift s_operator = "*"
d_answer = d_answer * d_number
endi
$ift s_operator = "/"
d_answer = d_answer / d_number
endi
$ift s_operator = "\"
d_answer = d_answer \ d_number
endi
$ift s_operator = "^"
dpow d_answer, d_answer, d_number
endi
$ift s_operator = "%"
d_answer = d_answer % d_number
endi
$ift s_operator = "@"
d_answer = d_answer @ d_number
endi
'put next operator in 1
$cut s_work, s_work, d_byte, 99999
d_byte = 1
endi
endi
dinc d_byte
$len d_long, s_work
dift d_byte > d_long: dinc d_loop
dift d_error = 1: dinc d_loop
'we end with a semi-colon
$cut s_any, s_work, 1, 1
$ift s_any = ";": dinc d_loop
endw
dift d_error = 1
s_out = "error in expression: " + s_line
$inp s_any, s_out
s_line = "X=X"
else
$cut s_any, s_line, 1, 1
$ift s_any = "X": dg_xvalue = d_answer
$ift s_any = "Y": dg_yvalue = d_answer
$ift s_any = "Z": dg_zvalue = d_answer
'show values
ded$ s_any, dg_xvalue, 0, 0
s_out = "x=" + s_any
dift dg_xvalue > 1
d_any = dg_xvalue \ 1
dift dg_xvalue = d_any
dfac d_any, dg_xvalue
dift d_any = 1: $app s_out, ":P"
endi
endi
ded$ s_any, dg_yvalue, 0, 0
$app s_out, ", y=" + s_any
dift dg_yvalue > 1
d_any = dg_yvalue \ 1
dift dg_yvalue = d_any
dfac d_any, dg_yvalue
dift d_any = 1: $app s_out, ":P"
endi
endi
ded$ s_any, dg_zvalue, 0, 0
$app s_out, ", z=" + s_any
dift dg_zvalue > 1
d_any = dg_zvalue \ 1
dift dg_zvalue = d_any
dfac d_any, dg_zvalue
dift d_any = 1: $app s_out, ":P"
endi
endi
$out s_out
$out s_dashes
'colon delimited into sg_xyzmath
$app sg_xyzmath, s_out + ":"
$inp s_line, "s=show past xyz commands"
$tup s_line, s_line
'do we have x=, or y=
d_process = 2
$cut s_any, s_line, 1, 2
$ift s_any = "X=": d_process = 1
$ift s_any = "Y=": d_process = 1
$ift s_any = "Z=": d_process = 1
$ift s_any = "S"
'list from sg_xyzmath colon delimited
$ch$ s_aster, "*", 60
s_line = "X=X"
$out s_aster
d_dot = 1
d_loop = 1
dwhi d_loop = 1
$par s_dot, sg_xyzmath, ":", d_dot
$trb s_dot, s_dot
$ift s_dot = sg_nothing
dinc d_loop
else
$out s_dot
dinc d_dot
endi
endw
$out s_aster
d_process = 1
endi
endi
s_command = "none"
endw
sg_pass1 = s_command
ends sub_xyz_math
subr sub_teaquad_prime_duo_speed_test
'updated 2009/05/07
'test qtp20 for speed test
vari d_any, s_any, d_dot, s_dot, s_out
vari d_sec1, d_sec2, d_sec3
vari s_number, d_factor
vari d_teaquadpart, d_teaquadmult
s_number = "10,100,000,026,832,025,221"
$out "testing=" + s_number
sg_pass1 = s_number
sub_teaquad_from_string
d_teaquadpart = dg_pass1
d_teaquadmult = dg_pass2
dsec d_sec1
dduo d_factor, d_teaquadpart, d_teaquadmult
dsec d_sec2
$out s_number
d_sec3 = d_sec2 - d_sec1
d_any = d_sec3 * 5
s_out = "factor=" + d_factor + " secs=" + d_sec3
$app s_out, " 5x=" + d_any
$out s_out
$inp s_any, "return"
ends sub_teaquad_prime_duo_speed_test
subr sub_prime_test_simple
'updated 2006/08/27, 2006/08/26, 2006/08/04, 2005/02/14, 2005/02/13
'2005/02/09, 2005/02/06, 2005/01/30, 2004/11/27, 2003/04/11
'simple test dg_pass1 for prime, if prime set dg_pass1 to 1
'otherwise set dg_pass1 to the divisor
'return number of tealines in dg_pass2
vari d_any, s_any, d_dot, s_dot
vari d_number, d_try, d_root, d_mod
vari d_loop, d_result
'make positive whole number
d_number = dg_pass1 \ 1
dabs d_number, d_number
'get root of
d_any = 1 / 2
dpow d_root, d_number, d_any
d_result = 1
dift d_number > 3
'first try 2
d_mod = d_number % 2
dift d_mod = 0: d_result = 2
endi
d_try = 3
d_loop = d_result
dift d_try > d_root: dinc d_loop
dwhi d_loop = 1
'test d_try
d_mod = d_number % d_try
dift d_mod = 0
'd_number is not prime
dinc d_loop
d_result = d_try
else
d_try = d_try + 2
dift d_try > d_root: dinc d_loop
endi
endw
dg_pass1 = d_result
ends sub_prime_test_simple
subr sub_speedquick
'updated 2008/02/23
vari d_any, d_dot, d_time
dsec d_time
d_dot = 10 ^ 6 * 2
d_any = 0
dwhi d_any < d_dot
dinc d_any
endw
dsec d_any
dg_pass1 = d_any - d_time
ends sub_speedquick
subr sub_speed98_test
'updated 2009/03/15, 2009/01/25, 2008/02/02, 2008/02/01
'2007/12/09, 2007/12/08, 2007/12/07, 2007/12/01, 2007/11/23
'2007/11/21, 2007/11/20, 2007/11/18, 2007/11/16, 2007/11/12
'2007/11/04, 2007/09/15, 2007/07/11, 2007/04/16, 2007/04/11
'2005/11/30, 2005/11/20, 2005/03/31, 2005/02/26, 2004/12/03
'speed test
vari d_any, s_any, d_dot, s_dot, s_out
vari d_time, d_max, d_count, d_index
vari s_dashes, d_tseconds
vari d_teaquadpart, d_teaquadmult
$sys s_any, 2
$out s_any
$ch$ s_dashes, "-", 70
$out s_dashes
sub_path_prog_memory
d_tseconds = 0
d_max = 10000 * 10000
'load array
d_index = 1
dwhi d_index <= 20000
dtoi d_index, d_index
dinc d_index
endw
'dwhi dinc loop
$out s_dashes
d_count = 0
dsec d_time
dwhi d_count < d_max
dinc d_count
endw
dsec d_any
d_time = d_any - d_time
d_tseconds = d_tseconds + d_time
$out "1.seconds=" + d_time + " dwhi dinc loop"
'dwhi +1 loop
$out s_dashes
d_count = 0
dsec d_time
dwhi d_count < d_max
d_count = d_count + 1
endw
dsec d_any
d_time = d_any - d_time
d_tseconds = d_tseconds + d_time
$out "2.seconds=" + d_time + " dwhi +1 loop"
'gtag dinc loop
$out s_dashes
d_count = 0
dsec d_time
gtag tag_gtagdinc
dinc d_count
dift d_count < d_max: goto tag_gtagdinc
dsec d_any
d_time = d_any - d_time
d_tseconds = d_tseconds + d_time
$out "3.seconds=" + d_time + " gtag dinc dift loop"
'gtag +1 dift loop
$out s_dashes
d_count = 0
dsec d_time
gtag tag_gtagplusone
d_count = d_count + 1
dift d_count < d_max: goto tag_gtagplusone
dsec d_any
d_time = d_any - d_time
d_tseconds = d_tseconds + d_time
$out "4.seconds=" + d_time + " gtag +1 dift loop"
'dwhi dift gtag loop
$out s_dashes
d_count = 0
dsec d_time
dwhi 1 = 1
dinc d_count
dift d_count >= d_max: goto tag_dwhigtag
endw
gtag tag_dwhigtag
dsec d_any
d_time = d_any - d_time
d_tseconds = d_tseconds + d_time
$out "5.seconds=" + d_time + " dwhi dift gtag"
'gtag dift gtag loop
$out s_dashes
d_count = 0
dsec d_time
gtag tag_gtaggtag1
dinc d_count
dift d_count >= d_max: goto tag_gtaggtag2
goto tag_gtaggtag1
gtag tag_gtaggtag2
dsec d_any
d_time = d_any - d_time
d_tseconds = d_tseconds + d_time
$out "6.seconds=" + d_time + " gtag dift gtag loop"
'gtag dift itod
$out s_dashes
dsec d_time
d_dot = 10000 * 2000
d_count = 0
d_index = 1
gtag tag_diftitod
itod d_any, d_index
dinc d_index
dift d_index > 8000: d_index = 1
dinc d_count
dift d_count <= d_dot: goto tag_diftitod
dsec d_any
d_time = d_any - d_time
d_tseconds = d_tseconds + d_time
$out "7.seconds=" + d_time + " gtag dift itod"
$out s_dashes
ded$ s_any, d_max, 0, 0
$out "loops=" + s_any
$out "total seconds=" + d_tseconds
$out s_dashes
$inp s_any, "done"
ends sub_speed98_test
subr sub_speed_test
'updated 2008/02/02, 2008/01/25, 2007/12/22, 2007/12/14
'2007/12/09, 2007/12/08, 2007/12/07, 2007/12/01, 2007/11/23
'2007/11/21, 2007/11/20, 2007/11/18, 2007/11/16, 2007/11/12
'2007/11/04, 2007/09/15, 2007/07/11, 2007/04/16, 2007/04/11
'2005/11/30, 2005/11/20, 2005/03/31, 2005/02/26, 2004/12/03
'speed test
vari d_any, s_any, d_dot, s_dot, s_out
vari d_count, d_max, d_index, d_time1, d_time2
vari s_dashes, d_tseconds
vari d_teaquadpart, d_teaquadmult
$sys s_any, 2
$out s_any
$ch$ s_dashes, "-", 70
$out s_dashes
sub_path_prog_memory
d_tseconds = 0
d_max = 10 ^ 6 * 100
'dwhi dinc loop
$out s_dashes
d_count = 0
dsec d_time1
dwhi d_count < d_max
dinc d_count
endw
dsec d_any
d_time1 = d_any - d_time1
d_tseconds = d_tseconds + d_time1
ded$ s_any, d_max, 0, 0
$out s_any + " dinc loop, seconds=" + d_time1
'dwhi +1 loop
$out s_dashes
d_count = 0
dsec d_time2
dwhi d_count < d_max
d_count = d_count + 1
endw
dsec d_any
d_time2 = d_any - d_time2
d_tseconds = d_tseconds + d_time2
ded$ s_any, d_max, 0, 0
$out s_any + " +1 loop, seconds=" + d_time2
$out s_dashes
$out "total time=" + d_tseconds
$out s_dashes
sub_path_prog_memory
$out s_dashes
$inp s_any, "done"
ends sub_speed_test