123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- #!/usr/bin/ruby
- # Numbers k such that the decimal expansion of the k-th harmonic number starts with the digits of k, in the same order.
- # https://oeis.org/A337904
- # Terms:
- # 1, 43, 714, 715, 9763, 122968, 122969, 1478366, 17239955
- # Larger terms:
- # 196746419, 2209316467, 24499118645, 268950072605, 2928264676792, 31663398162514, 340383084842938, 3640820101879826, 38773735148047406, 38773735148047407, 411354473689969709, 4349378018952283972, 45849102972919835109, 482017272880546223321, 5055191842047792613562, 52899904144628296988725, 552458815055031196782525, 5759002212954326201649741, 59932476432458393252342721, 622733769885549555429595981, 6461284125481523641339765370, 66950973792848320411792499601, 692878680960562864969363384910, 7162360810346449261192969637028, 73958269462680913376461650794152, 762919205903660944920523210661377, 7862462356803215299533205007813806, 80956434902985402104622557703016977, 832874061781047994819672246576419514, 8561758460942363424315837377300688366, 87947013526805356793864093102783600499, 902757327901213687376081267798908754616, 9260377915106116852616564230637740582108, 94931186568893878451195580899916418846736, 972579864870501412683269238042780744028743, 9958420807622547975400738352360988337988344
- func isok(k) {
- k.harmreal.to_s.sub('.', '').first(k.len) == k.to_s
- }
- #~ [
- #~ 122969
- #~ 1478366
- #~ 17239955
- #~ 196746419
- #~ 2209316467
- #~ 24499118645
- #~ 268950072605
- #~ 2928264676792
- #~ 31663398162514
- #~ 340383084842938
- #~ 3640820101879826
- #~ 38773735148047407
- #~ 411354473689969709
- #~ 4349378018952283972
- #~ 45849102972919835109
- #~ 482017272880546223321
- #~ 5055191842047792613562
- #~ 52899904144628296988725
- #~ 552458815055031196782525
- #~ 5759002212954326201649741
- #~ 59932476432458393252342721
- #~ 622733769885549555429595981
- #~ 6461284125481523641339765370
- #~ 66950973792848320411792499601
- #~ 692878680960562864969363384910
- #~ 7162360810346449261192969637028
- #~ 73958269462680913376461650794152
- #~ 762919205903660944920523210661377
- #~ 7862462356803215299533205007813806
- #~ 80956434902985402104622557703016977
- #~ 832874061781047994819672246576419514
- #~ 8561758460942363424315837377300688366
- #~ 87947013526805356793864093102783600499
- #~ 902757327901213687376081267798908754616
- #~ 9260377915106116852616564230637740582108
- #~ 94931186568893878451195580899916418846736
- #~ 972579864870501412683269238042780744028743
- #~ 9958420807622547975400738352360988337988344
- #~ ].each{|n|
- #~ for j in (-100 .. 100) {
- #~ var k = n+j
- #~ if (isok(k)) {
- #~ say k
- #~ }
- #~ }
- #~ }
- #~ __END__
- # 196746419
- # 2209316467
- #say bsearch_le(196397502, 196910435, {|k|
- #~ say bsearch_le(2208893886,2213339062 , {|k|
- #~ (k / 10**8) <=> harmreal(k)
- #~ })
- #__END__
- var n = 1
- for k in (1..10000) {
- local Num!PREC = numify(4*(n + 10))
- # for n in (1000..2000) {
- if (harmreal(k * 10**n).to_s.begins_with(k.to_s)) {
- #say (k * 10**n)
- #say [k * 10**n, harmreal(k * 10**n) * 10**n, harmreal((k+1) * 10**n) * 10**n]
- var (min, max) = (harmreal(k * 10**n) * 10**n, harmreal((k+1) * 10**n) * 10**n)
- var v = bsearch_le(min, max, {|k|
- (k / 10**n) <=> harmreal(k)
- })
- var ok = false
- if (isok(v-1)) {
- say v-1
- ok = true
- }
- if (isok(v)) {
- say v
- ok = true
- }
- ++n if ok
- }
- # ++n
- # }
- }
- __END__
- say bsearch_min(196446850/2, 2*196446850, {|k|
- (k / 10**8) <=> harmreal(k)
- })
- __END__
- use 5.014;
- use Math::MPFR;
- my $f = Math::MPFR::Rmpfr_init2(66);
- my $t = Math::MPFR::Rmpfr_init2(66);
- Math::MPFR::Rmpfr_const_euler($t, 0);
- foreach my $k(1..1e9) {
- Math::MPFR::Rmpfr_set_ui($f, $k, 0);
- Math::MPFR::Rmpfr_digamma($f, $f, 0);
- Math::MPFR::Rmpfr_add($f, $f, $t, 0);
- my ($mantissa, $exponent) = Math::MPFR::Rmpfr_deref2($f, 10, length($k-1)+2, 0);
- if (substr($mantissa, 0, length($k-1)) eq ($k-1)) {
- say "$k -> ", $mantissa;
- say $k-1;
- }
- }
- __END__
- for k in (1..1e9) {
- if (k.harmreal.to_s.sub('.', '').first(k.len) == k.to_s) {
- print(k, ", ")
- }
- }
|