-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprog.sf
96 lines (72 loc) · 1.85 KB
/
prog.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
#!/usr/bin/ruby
# Even numbers k such that k^2 - 1 is a powerful number.
# https://oeis.org/A365983
# k^2 - 1 = (k-1)*(k+1), therefore both k-1 and k+1 must be odd powerful numbers.
# Known terms:
# 26, 70226, 130576328, 189750626, 512706121226, 13837575261124, 99612037019890, 1385331749802026
func odd_powerful_numbers(a, b, k=2) {
var odd_powerful = []
func (m,r) {
if (r < k) {
odd_powerful << m
return nil
}
var from = 1
var upto = iroot(idiv(b,m), r)
if ((r <= k) && (a > m)) {
from = idiv_ceil(a,m).iroot(r)
}
for j in (from .. upto) {
j.is_even && next
if (r > k) {
j.is_coprime(m) || next
j.is_squarefree || next
}
var t = (m * j**r)
if ((r <= k) && (t < a)) {
next
}
__FUNC__(t, r-1)
}
}(1, 2*k - 1)
odd_powerful.sort
}
var lo = 2
var hi = 2*lo
loop {
say "Sieving range: #{[lo, hi]}"
var arr = odd_powerful_numbers(lo-2, hi+2)
var lookup = arr.to_set
arr.each {|k|
if (lookup.has(k-2)) {
say k.dec
}
}
#arr.each {|v|
# if (is_powerful(v.inc.sqr.dec)) {
# say v.inc
# }
#}
lo = hi+1
hi = 2*lo
}
__END__
Sieving range: [2, 4]
Sieving range: [5, 50]
26
Sieving range: [51, 510]
Sieving range: [511, 5110]
Sieving range: [5111, 51110]
Sieving range: [51111, 511110]
70226
Sieving range: [511111, 5111110]
Sieving range: [5111111, 51111110]
Sieving range: [51111111, 511111110]
130576328
189750626
Sieving range: [511111111, 5111111110]
Sieving range: [5111111111, 51111111110]
Sieving range: [51111111111, 511111111110]
Sieving range: [511111111111, 5111111111110]
512706121226
Sieving range: [5111111111111, 51111111111110]