-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsemiprimes_from_base_and_power.sf
104 lines (75 loc) · 2.69 KB
/
semiprimes_from_base_and_power.sf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/usr/bin/ruby
# Stuck at factoring 11377310110313797116995244643372306462071574949641291681739498849533064165665673649863189351052505393389366084059750588162160079869
# http://factordb.com/index.php?id=1100000001318381178
func a(n) {
if (n == 41103317638320436730392067714899862954316359911332441829911006620816489611*1111111) {
return ([17, 239, 673, 4649, 96320499919324195271519597599231, 37298740222936491728588795875805799941,].sort.join.to_i, [1,1,1,1,1,1].join.to_i)
}
if (n == 1723967346499632049991932419527151959759923137298740222936491728588795875805799941*111111) {
var u = [3, 7, 11, 13, 37, 1657 , 72233167 , 617484083022656594245091436224513 , 3332315118272593925017044587836677029].sort
var v = [1, 2, 1, 1, 1, 1, 1, 1, 1, 1]
assert_eq(u ~Z v -> map_2d {|p,e| p**e }.prod, n)
return (u.join.to_i, v.join.to_i)
}
if (n == 371113371657722331676174840830226565942450914362245133332315118272593925017044587836677029*1211111111) {
var u = [ 7, 6329, 27337,11 , 43, 281 , 11923 , 3944082087439001, 47648227265569469207257, 1246122981188056088743422180332093460309703].sort
var v = u.len.of(1)
assert_eq(u ~Z v -> map_2d {|p,e| p**e }.prod, n)
return (u.join.to_i, v.join.to_i)
}
if (n == 71143281632911923273373944082087439001476482272655694692072571246122981188056088743422180332093460309703*1111111111) {
var u = [
11, 41, 271, 9091
47
2712254309
5398739750886659547682771
103374455659990728613394034946688195824458914475857576621946484997591
].sort
var v = u.len.of(1)
assert_eq(u ~Z v -> map_2d {|p,e| p**e }.prod, n)
return (u.join.to_i, v.join.to_i)
}
if (n == 114147271909127122543095398739750886659547682771103374455659990728613394034946688195824458914475857576621946484997591*11111111) {
var u = [
11, 73, 101, 137,
37
103
971
1699
5244643
157494964129
37230646207
1681739498849533064165665673649863189
351052505393389366084059750588162160079869
].sort
var v = u.len.of(1)
assert_eq(u ~Z v -> map_2d {|p,e| p**e }.prod, n)
return (u.join.to_i, v.join.to_i)
}
var f = n.factor_exp
var ps = f.map{.first}
var es = f.map{.last}
(ps.join.to_i, es.join.to_i)
}
#say 20.of(a)
func b(n) {
return n if n.is_prime
var (u,v) = a(n)
loop {
u.is_prime && v.is_prime && return u*v
(u,v) = a(u*v)
say [u,v]
}
#var t = n
#loop {
#t.is_prime && return t
#t = a(t)
#say t
#}
}
#say 20.of {b(_+3)}
#say b(6)
#say 10.of { b(_+2) }
for k in (2..10) {
say [k, b(k)]
}