-
Notifications
You must be signed in to change notification settings - Fork 0
/
prog.sf
82 lines (59 loc) · 1.56 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
#!/usr/bin/ruby
#~ func f(n) {
#~ {|p| p.is_prime && (p.dec.divisors.count {|d| d.is_composite && (powmod(2, d, p) == 1) } == n) }.first[0]
#~ }
#~ say 10.of {|n| f(n+1) }
#~ for p in (primes(1e3)) {
#~ if (2*(p-1) + 1 -> is_prime) {
#~ if (gcd(2*(p-1), p-1) != p-1) {
#~ print(p, ", ")
#~ assert(p * (2*(p-1) + 1) -> is_fermat_pseudoprime(2))
#~ }
#~ #print(p, ", ")
#~ }
#~ }
#~ __END__
# These primes can be used in generating Fermat pseudoprimes
var primes = [3, 7, 31, 127, 601, 1801, 6361, 8191, 100801, 201961, 525313, 704161, 7215601,]
var table = Hash()
for p in (primes) {
for d in (p.dec.divisors) {
if (powmod(2, d, p) == 1) {
table{d} := [] << p
}
}
}
for v in (table.values) {
if (v.len > 1) {
for k in (2..v.len) {
say v.combinations(k).map{.prod}
}
}
}
# Pseudoprimes: 1082401, 60581401, 181542601, 109107103201
#say table
__END__
var max = 0
for p in (primes(1e5)) {
var c = p.dec.divisors.count {|d| (powmod(2, d, p) == 1) }
#print(c, ", ")
if (c > max) {
max = c
print(p, ", ")
}
}
__END__
var n = 15910404750/(3*3*5*229)
var anynum = frequire('Math::AnyNum')
#for p in (primes(1e6)) {
for p in (1..1e6) {
if (is_prime(n*p + 1) && is_prime(2*n*p + 1)) {
var t = ((n*p + 1) * (2*n*p + 1))
if (t -> is_fermat_pseudoprime(3)) {
#say "Fermat: #{t}"
if (anynum.is_prime(t, 10)) {
say "Anynum: #{t}"
}
}
}
}