Rata-rata aritmatika dari Angka Fibonacci prima hingga x Angka Fibonacci


18

Anda seharusnya sudah mendengar tentang Angka Fibonacci , sering disebut Urutan Fibonacci. Dalam urutan ini, dua istilah pertama adalah 0 dan 1, dan setiap angka setelah dua yang pertama adalah jumlah dari dua yang sebelumnya. Dengan kata lain F(n) = F(n-1) + F(n-2),.

Inilah 20 angka Fibonacci pertama:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

Tugas:

Dengan bilangan bulat x, hitung rata-rata aritmatika (rata-rata) dari Angka-Angka Fibonacci utama hingga xjumlah Urutan Fibonacci.

Aturan:

  • urutan Fibonacci dimulai dengan 0 dan 1 untuk tantangan ini
  • 3 < x < 40, karena nilai yang lebih tinggi dari xdapat menyebabkan waktu eksekusi besar atau meluap dan nilai yang lebih kecil tidak memiliki output
  • 1 BUKAN prima, karena hanya memiliki 1 pembagi
  • rata-rata aritmatik harus menyertakan desimal, jika itu masalahnya, atau harus ditampilkan sebagai fraksi yang tepat
  • Anda hanya diperbolehkan untuk mengambil xinput dan kode yang diperlukan untuk mengambil input tidak masuk hitungan (misalnya: jika Anda memerlukan sesuatu seperti x = input(), Anda tidak harus mempertimbangkannya saat menghitung byte)

Contoh:

Ex. 1: Untuk x=10, outputnya adalah 5.75, karena angka Fibonacci 10 adalah 55dan bilangan Fibonacci utama 55adalah 2, 3, 5, 13, rata-rata mereka5.75

Mengikuti penjelasan dari contoh 1, contoh lain adalah:

Ex. 2: Untuk x=15, outputnya adalah57.5

Ex. 3: Untuk x=20, outputnya 277.428571428571, atau perkiraan dekat lainnya. Dalam hal ini 277.4286, misalnya, adalah nilai yang diterima

Ex. 4: Untuk x=11, outputnya22.4

Ex. 5: Untuk x=30, outputnya 60536.4444444444, atau perkiraan dekat lainnya, seperti60536.444


Papan peringkat:


Untuk mengubah pemimpin, kirim solusi yang lebih pendek dan valid. Kode Anda harus sesingkat mungkin, karena ini adalah , jadi jawaban tersingkat dalam byte menang. Semoga berhasil!


Bisakah hasilnya dikembalikan sebagai pecahan yang tepat daripada desimal bulat?
Martin Ender

Ya tentu saja, asalkan itu nilai yang benar.
Mengedit

Jika jawaban diberikan sebagai pecahan, apakah pecahan harus dikurangi?
DLosc

Terserah kamu. Anda dapat menguranginya jika Anda mau, tetapi saya pikir itu tidak perlu.
Tn. Xcoder

Harap perbarui jawaban yang diterima.
Erik the Outgolfer

Jawaban:


5

Sebenarnya 10 byte

Kode:

R♂F;Mr♂P∩æ

Penjelasan:

R            # On the input, create the range [1 .. input].
 ♂F          # Map the nth Fibonacci command over it.
   ;M        # Duplicate and get the maximum of the list.
     r       # Create the range [0 .. maximum - 1].
      ♂P     # Map the nth prime operator over each element (zero-indexed).
        ∩    # Intersection of both.
         æ   # Get the mean and implicitly display.

Menggunakan pengodean CP-437 . Cobalah online!


Wow, melakukan pekerjaan seperti itu hanya dalam 10 byte. Impresif!
Tn. Xcoder

12

Python 2 , 71 byte

s=2.;a=b=c=1
exec"p=2**a%a==2;c+=p;s+=a*p;a,b=b,a+b;"*input()
print s/c

Cobalah online!

Python tidak memiliki built-in aritmatika yang berguna untuk ini, jadi kami melakukan hal-hal dengan tangan. Kode iterate melalui angka-angka Fibonacci melalui a,b=b,a+bmulai dari a=b=1.

The uji primality Fermat dengan basis 2 digunakan untuk mengidentifikasi bilangan prima sebagai amana 2^a == 2 (mod a). Meskipun ini hanya memeriksa kemungkinan bilangan prima, tidak ada positif palsu yang ada dalam 40 angka Fibonacci pertama.

Jumlah sdan jumlah cprima saat ini diperbarui setiap kali prime ditemui, dan rasio mereka (rata-rata) dicetak di akhir. Karena pengecekan perdana gagal a=2dan dijamin berada dalam rentang input, jumlah dimulai dari 2 dan penghitungan dimulai pada 1 untuk mengkompensasi.


8

Jelly , 11 byte

ÆḞ€ÆPÐfµS÷L

Cobalah online!

Bagaimana itu bekerja

ÆḞ€ÆPÐfµS÷L  Main link. Argument: n (integer)

ÆḞ€          Map the Fibonacci atom over [1, ..., n].
   ÆPÐf      Filter by primality.
       µ     Begin a new chain. Argument: A (array of Fibonacci primes)
        S    Yield the sum of A.
          L  Yield the length of A.
         ÷   Compute the quotient.

11
2 dari 3 solid pada built-in matematika. Fibonacci, periksa. Primality, periksa. Berarti aritmatika, tidak.
xnor

Saya telah mengubah jawaban yang diterima, karena yang lebih pendek diposting.
Tn. Xcoder

7

Mathematica, 38 byte

Mean@Select[Fibonacci@Range@#,PrimeQ]&

(* or *)

Mean@Select[Fibonacci~Array~#,PrimeQ]&

Penjelasan

Mean@Select[Fibonacci@Range@#,PrimeQ]&  
                                     &  (* For input # *)
                      Range@#           (* List {1, 2, 3, ... #} *)
            Fibonacci@                  (* Find the corresponding fibonacci numbers *)
     Select[                 ,PrimeQ]   (* Select the prime terms *)
Mean@                                   (* Take the Mean *)

2
Saya pikir Anda ingin #dan tidak #-1: OP mengatakan bahwa 55 adalah angka Fibonacci 10, jadi daftar mereka harus diindeks 0 (seperti konvensi terbaik). Bandingkan output Anda dengan input 10dan 11dengan OP. Untungnya ini sebenarnya menghemat tiga byte!
Greg Martin

Anda dapat menjatuhkan &dan menggantinya #dengan x(pertanyaan mengatakan bahwa kode pengambilan input tidak diberi skor)
CalculatorFeline

6

Perl 6 , 51 byte

{sum($/=[grep *.is-prime,(0,1,*+*...*)[0..$_]])/$/}

Cobalah

Diperluas:

{
  sum(
    $/ = [                # store as an Array in $/

      grep
        *.is-prime,       # find the primes
        (
          0, 1, *+* ... * # Fibonacci sequence
        )[ 0 .. $_ ]      # grab the indicated values in the sequence

    ]
  )

  /

  $/   # use the Array as a number (elems)
}

5

MATL , 16 byte

lOi:"yy+]vtZp)Ym

Cobalah online!

Penjelasan

lO     % Push 1, then 0. This way the generated numbers with indices 1, 2, 3, ...
       % will be 1, 1, 2, ... as required
i      % Input n
:"     % Do the following n times
  yy   %   Duplicate top two numbers
  +    %   Add
]      % End
v      % Concatenate all numbers into a column vector
t      % Duplicate
Zp     % Vector of logical values: true for prime numbers, false otherwise
)      % Apply that vector as an index. This keeps only prime numbers
Ym     % Mean. Implicitly display

4

Oktaf , 75 71 byte

@(n)mean((t=fix(((1+(s=5^.5)).^(x=1:n)-(1-s).^x)/s./2.^x))(isprime(t)))

Fungsi anonim yang menggunakan rumus Binet . Input dan output dalam bentuk argumen fungsi.

Cobalah online!


1
+1 untuk penggunaan formula Binet yang menarik, dikombinasikan dengan bawaan isprimeyang sempurna untuk tantangan ini.
Tn. Xcoder

4

Maksima, 49 byte

f(n):=mean(sublist(makelist(fib(x),x,n),primep));

4

Prolog (SWI) , 269 264 254 218 byte

  • Terima kasih untuk Fatalize karena menghemat 37 byte!
  • Terima kasih kepada Emigna karena telah menghemat 9 byte!

Saya cukup yakin bahwa saya bisa menurunkan beberapa byte lagi.

X/X:-X<3.
N/R:-A is N-1,B is N-2,A/C,B/D,R is C+D.
2^0^0.
C^S^E:-G is C-1,G/M,G^Q^R,(p(M)->S=M+Q,E is R+1;S=Q,E is R).
a(X,S):-X^R^Q,S is R/Q.
p(N):-N*(N-1).
p(2).
p(3).
N*2:-N mod 2=\=0.
N*C:-N mod C=\=0,D is C-1,N*D.

Menjalankannya sebagai a(15, R).untuk x = 15 , R adalah variabel output.

Cobalah online!


Versi yang lebih mudah dibaca:

fibonacci(1, 1) :- !.
fibonacci(2, 2) :- !.

fibonacci(N, R) :-
  N0 is N - 1,
  N1 is N - 2,
  fibonacci(N0, R1),
  fibonacci(N1, R2),
  R is R1 + R2.

listed(2, 0, 0) :- !.

listed(C, S, Successes) :-
  C0 is C - 1,
  fibonacci(C0, Result),
  listed(C0, S0, S1),
  (
    is_prime(Result)
    ->
      S = Result + S0, Successes is S1 + 1
    ; S = S0, Successes is S1
  ).

f(X, S) :-
  listed(X, R, Q),
  S is R / Q.

is_prime(Num) :- is_prime(Num, Num - 1).

is_prime(2).
is_prime(3).

is_prime(Num, 2) :- Num mod 2 =\= 0, !.

is_prime(Num, C) :-
  Num mod C =\= 0,
  C0 is C - 1,
  is_prime(Num, C0).

1
Bermain golf di SWI Prolog itu emas (dan sangat sulit), kerja yang sangat bagus!
Tn. Xcoder

Saya cukup yakin hal-hal seperti N*C:-diizinkan untuk deklarasi kepala di PPCG, yang dapat menghemat beberapa byte.
Fatalkan

@Fatalize Saya baru belajar bahasa pemrograman ini sekitar seminggu yang lalu, jadi saya tidak yakin apa yang Anda maksud: p. Apakah Anda bermaksud mengganti p(N,C):-dengan N*C:-?
Adnan

@ Adnan Persis!
Fatalkan

@Faktalisasi Oohhh, itu benar-benar rapi! Terima kasih :)
Adnan

3

Röda , 98 94 93 byte

f n{z=0;i=1;j=1;s=0;seq 2,n-1|{|_|c=i+j;i=j;j=c;seq 2,c-1|{z+=1;s+=c}if[c%p>0]()for p}_[s/z]}

Ini adalah fungsi yang mengembalikan hasilnya sebagai angka floating point.

Versi tidak disatukan:

function f(n) {
    i = 1
    j = 1
    sum = 0
    num = 0
    seq(2, n-1) | for _ do
        /* calculate next fibonacci number: */
        c = i+j
        i = j
        j = c
        /* if it's prime: */
        {
            num += 1
            sum += c
        /* primality test: */
        } if [c%p > 0]() for p in [seq(2, c-1)]
    done
    return sum/num
}

Dapat Anda lakukan c%p>0bukan c%p!=0?
Kritixi Lithos

@KritixiLithos Ya! Terima kasih.
fergusq

3

05AB1E , 13 byte

!ÅF¹£DpÏDOsg/

Cobalah online! atau sebagai Test suite

Penjelasan

!ÅF             # get a list of fibonacci numbers up to fac(input)
   ¹£           # take the first input elements of that list
     D          # duplicate
      p         # isprime on the copy
       Ï        # keep the fibonacci numbers which are true in the isprime list
        D       # duplicate the list of fibonacci primes
         O      # sum the list
          s     # swap the other copy to the top of the stack
           g    # get its length
            /   # divide sum by length


2

dc , 129 byte

?sa0sb1sd0ss0sz[[lF1+sF]sqlelG!=q]si[ls+sslz1+sz]sw[lddlb+dsdrsbdsG2se0sF[lGdle%0=ile1+dse<p]dspxlF0=wla1-dsa1<c]dscxEkls1-lz1-/p

Generator nomor Fibonacci dan pemeriksa primalitas semuanya menjadi satu. Bagus.

Cobalah online!


2

Japt , 14 byte

ò@MgXÃfj
x /Ul

Menguji


Penjelasan

Input bilangan bulat implisit U.
30

ò

Buat array bilangan bulat dari 0 hingga Uinklusif.
[0,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]

@   Ã

Lewati setiap integer melalui fungsi.

MgX

Dapatkan Xnomor Fibonacci th, di mana Xelemen saat ini.

[0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040]

fj

Saring ( f) array ke elemen-elemen yang mengembalikan kebenaran ketika diperiksa untuk primality ( j). Secara implisit tetapkan array yang dihasilkan ke variabel U.
[2,3,5,13,89,233,1597,28657,514229]

x

Kurangi array dengan menjumlahkan.
544828

/Ul

Bagilah hasilnya dengan panjang array ( l) dan secara implisit menampilkan hasilnya.
60536.444444444445


Wow, saya suka jawaban baru untuk pertanyaan lama. Juga dekat dengan bahasa golf lainnya, jadi +1.
Tn. Xcoder

1

perl, 91 byte

$b=1;map{($a,$b)=($b,$a+$b),$p=("x"x$b)!~/^(.|(..+)\2+)$/,$s+=$b*$p,$c+=$p}2..$x;print$s/$c

Cuold lebih pendek 8 byte jika tes modulo pseudoprime bekerja dengan baik di perl seperti pada jawaban python:

$b=1;$s=2;map{($a,$b)=($b,$a+$b),$p=2**$b%$b==2,$s+=$b*$p,$c+=$p}2..$x;print$s/++$c

... tapi ini memberikan jawaban yang salah untuk input> 16 dalam perl.


1

Aksioma, 104 byte

g(n)==(y:=x:=r:=0;repeat(x>n=>break;j:=fibonacci(x);x:=x+1;if prime?(j)then(r:=r+j;y:=y+1));y=0=>-1;r/y)

ungolfed, kode uji dan hasil

f(n)==
  y:=x:=r:=0
  repeat
     x>n=>break
     j:=fibonacci(x)
     x:=x+1
     if prime?(j) then(r:=r+j;y:=y+1)
  y=0=>-1
  r/y

(3) -> [[i,g(i)::Float] for i in [1,2,3,10,15,20,11,30,50]]
   Compiling function g with type PositiveInteger -> Fraction Integer
   (3)
   [[1.0,- 1.0], [2.0,- 1.0], [3.0,2.0], [10.0,5.75], [15.0,57.5],
    [20.0,277.4285714285 7142857], [11.0,22.4], [30.0,60536.4444444444 44444],
    [50.0,309568576.1818181818 2]]

saya mencoba untuk menduplikasi matematica, oktaf dll bahasa masuk, jika salah satu tidak menghitung mean fungsi (), untuk menerapkannya akan berada di sini 62 bytes begitu baik juga

mean(a:List Float):Any== 
    i:=1; s:=0.0
    repeat  
       if~index?(i,a)then break
       s:=s+a.i
       i:=i+1
    i=1=>[]
    s/(i-1)

--62 bytes
f(x:NNI):Any==mean(select(prime?,[fibonacci(i)for i in 1..x]))

1

JavaScript ES6, 137 136 118 113 byte

m=

n=>(a=[],(f=x=>a[x]=x<2?x:f(--x)+f(--x))(n),eval((a=a.filter(x=>eval("for(y=x;x%--y;);y==1"))).join`+`)/a.length)

console.log(m(10))
console.log(m(15))
console.log(m(20))
console.log(m(11))
console.log(m(30))


Sejarah

118 byte

n=>(a=[0,1,1],(f=x=>a[--x]=a[x]||f(x)+f(--x))(n),eval((a=a.filter(x=>eval("for(y=x;x%--y;);y==1"))).join`+`)/a.length)

136 byte

n=>(a=[0,1,1],(f=x=>a[--x]=a[x]||f(x)+f(--x))(n),eval((a=a.filter(x=>x>1&&!Array(x).fill().some((i,j)=>j>1&&!(x%j)))).join`+`)/a.length)

137 byte

n=>(a=[0,1,1],(f=x=>a[--x]=a[x]||f(x)+f(--x))(n),eval((a=a.filter(x=>{d=x;while(--d>1)if(!(x%d))return 0;return x>1})).join`+`)/a.length)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.