Giá trị trung bình số học của các số Fibonacci chính lên đến x Số Fibonacci


18

Bạn nên nghe về các số Fibonacci , thường được gọi là Chuỗi Fibonacci. Trong chuỗi này, hai số hạng đầu tiên là 0 và 1, và mọi số sau hai số đầu tiên là tổng của hai số trước. Nói cách khác , F(n) = F(n-1) + F(n-2).

Dưới đây là 20 số Fibonacci đầu tiên:

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

Bài tập:

Cho một số nguyên x, tính giá trị trung bình số học (trung bình) của các số Fibonacci chính cho đến xsố của Chuỗi Fibonacci.

Quy tắc:

  • chuỗi Fibonacci bắt đầu bằng 0 và 1 cho thử thách này
  • 3 < x < 40, bởi vì các giá trị cao hơn xcó thể gây ra một số thời gian thực hiện lớn hoặc tràn và các giá trị nhỏ hơn không có đầu ra
  • 1 không phải là số nguyên tố, vì nó chỉ có 1 ước
  • trung bình số học nên bao gồm số thập phân, nếu đó là trường hợp hoặc nên được hiển thị dưới dạng phân số chính xác
  • bạn chỉ được phép lấy xlàm đầu vào và mã cần thiết để lấy đầu vào không được tính (ví dụ: nếu bạn cần một cái gì đó như thế x = input(), bạn không nên xem xét nó khi đếm byte)

Ví dụ:

Ví dụ. 1:x=10, đầu ra là 5.75, vì ngày 10 số Fibonacci là 55và những con số Fibonacci thủ lên đến 552, 3, 5, 13, con người trung bình của họ5.75

Theo giải thích từ ví dụ 1, các ví dụ khác là:

Ví dụ. 2: Đối với x=15, đầu ra là57.5

Ví dụ. 3: Đối với x=20, đầu ra là 277.428571428571, hoặc bất kỳ xấp xỉ gần đúng khác. Trong trường hợp này 277.4286, ví dụ, là một giá trị được chấp nhận

Ví dụ. 4: Đối với x=11, đầu ra là22.4

Ví dụ. 5: Đối với x=30, đầu ra là 60536.4444444444, hoặc bất kỳ xấp xỉ gần đúng nào khác, chẳng hạn như60536.444


Bảng xếp hạng:


Để thay đổi người lãnh đạo, hãy gửi một giải pháp hợp lệ ngắn hơn. Mã của bạn phải càng ngắn càng tốt, vì đây là , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng. Chúc may mắn!


Kết quả có thể được trả về dưới dạng phân số chính xác thay vì số thập phân tròn không?
Martin Ender

Có tất nhiên, miễn là nó là giá trị chính xác. Đã chỉnh sửa câu hỏi :))
Ông Xcoder

Nếu câu trả lời được đưa ra dưới dạng phân số, thì có phải giảm phân số không?
DLosc

Tùy bạn. Bạn có thể giảm nó nếu bạn muốn, nhưng tôi không nghĩ điều đó là cần thiết.
Ông Xcoder

Hãy cập nhật câu trả lời được chấp nhận.
Erik the Outgolfer

Câu trả lời:


5

Trên thực tế , 10 byte

Mã số:

R♂F;Mr♂P∩æ

Giải trình:

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.

Sử dụng mã hóa CP-437 . Hãy thử trực tuyến!


Wow, thực hiện một công việc như vậy chỉ trong 10 byte. Ấn tượng!
Ông 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

Hãy thử trực tuyến!

Python không tích hợp số học hữu ích cho việc này, vì vậy chúng tôi làm mọi thứ bằng tay. Mã lặp lại thông qua các số Fibonacci thông qua a,b=b,a+bbắt đầu từ a=b=1.

Các Kiểm tra Fermat với cơ sở 2 được sử dụng để xác định số nguyên tố như anơi 2^a == 2 (mod a). Mặc dù điều này chỉ kiểm tra các số nguyên tố có thể xảy ra, nhưng không có kết quả dương tính giả nào nằm trong 40 số Fibonacci đầu tiên.

Tổng số svà số cnguyên tố hiện tại được cập nhật mỗi khi gặp một số nguyên tố và tỷ lệ của chúng (giá trị trung bình) được in ở cuối. Vì kiểm tra chính bị bỏ lỡ a=2và nó được đảm bảo nằm trong phạm vi đầu vào, nên tổng bắt đầu từ 2 và số đếm bắt đầu từ 1 để bù.


8

Thạch , 11 byte

ÆḞ€ÆPÐfµS÷L

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

ÆḞ€Æ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
Một phần 2 vững chắc về toán học tích hợp. Xơ, kiểm tra. Nguyên thủy, kiểm tra. Trung bình số học, không.
xnor

Tôi đã thay đổi câu trả lời được chấp nhận, bởi vì một câu trả lời ngắn hơn đã được đăng.
Ông Xcoder

7

Toán học, 38 byte

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

(* or *)

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

Giải trình

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
Tôi nghĩ rằng bạn muốn #và không #-1: OP nói rằng 55 là số Fibonacci thứ 10, vì vậy danh sách của họ phải được lập chỉ mục 0 (như là quy ước tốt nhất). So sánh đầu ra của bạn cho đầu vào 1011với OP. May mắn là điều này thực sự giúp bạn tiết kiệm ba byte!
Greg Martin

Bạn có thể bỏ &và thay thế #bằng x(câu hỏi nói rằng mã lấy đầu vào không được ghi)
CalculatorFeline

6

Perl 6 , 51 byte

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

Thử nó

Mở rộng:

{
  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

Hãy thử trực tuyến!

Giải trình

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

Tối đa, 49 byte

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

4

Prolog (SWI) , 269 264 254 218 byte

  • Cảm ơn Fatalize vì đã tiết kiệm được 37 byte!
  • Cảm ơn Emigna đã lưu 9 byte!

Tôi khá chắc chắn rằng tôi có thể chơi gôn nhiều hơn.

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.

Chạy nó như a(15, R).cho x = 15 , R là biến đầu ra.

Hãy thử trực tuyến!


Một phiên bản dễ đọc hơn:

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
Chơi golf trong SWI Prolog là vàng (và rất khó), thật tuyệt!
Ông Xcoder

Tôi khá chắc chắn những thứ như N*C:-được phép cho khai báo đầu trong PPCG, có thể giúp bạn tiết kiệm một số byte.
Gây tử vong vào

@Firthize Tôi mới học ngôn ngữ lập trình này khoảng một tuần trước, vì vậy tôi không chắc ý của bạn là gì: p. Bạn có nghĩa là để thay thế p(N,C):-với N*C:-?
Ad Nam

@Ad Nam Chính xác!
Gây tử vong vào

@Firthize Oohhh, điều đó thực sự gọn gàng! Cảm ơn :).
Ad Nam

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]}

Đây là một hàm trả về kết quả dưới dạng số dấu phẩy động.

Phiên bản bị đánh cắp:

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
}

Bạn có thể làm c%p>0thay vì c%p!=0?
Kritixi Lithos

@KritixiLithos Vâng! Cảm ơn bạn.
fergusq

3

05AB1E , 13 byte

!ÅF¹£DpÏDOsg/

Hãy thử trực tuyến! hoặc như một bộ thử nghiệm

Giải trình

!Å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

Một trình tạo số Fibonacci và trình kiểm tra tính nguyên thủy tất cả trong một. Tốt đẹp.

Hãy thử trực tuyến!


2

Japt , 14 byte

ò@MgXÃfj
x /Ul

Kiểm tra nó


Giải trình

Đầu vào ngầm định của số nguyên U.
30

ò

Tạo một mảng các số nguyên từ 0 đến Ubao gồm.
[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]

@   Ã

Truyền mỗi số nguyên thông qua một hàm.

MgX

Lấy Xsố Fibonacci thứ, đâu Xlà phần tử hiện tại.

[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

Lọc ( f) mảng thành các phần tử trả về giá trị trung thực khi được kiểm tra tính nguyên thủy ( j). Hoàn toàn gán mảng kết quả cho biến U.
[2,3,5,13,89,233,1597,28657,514229]

x

Giảm mảng bằng cách tính tổng.
544828

/Ul

Chia kết quả cho độ dài của mảng ( l) và hoàn toàn xuất kết quả.
60536.444444444445


Wow, tôi thích câu trả lời mới cho câu hỏi cũ. Cũng gần với các ngôn ngữ chơi gôn khác, nên +1.
Ông 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 đã ngắn hơn 8 byte nếu thử nghiệm giả modulo hoạt động tốt trong perl như trong câu trả lời của 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

... nhưng điều này cho câu trả lời sai cho đầu vào> 16 in perl.


1

Tiên đề, 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)

không kiểm tra, mã kiểm tra và kết quả

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]]

tôi cố gắng sao chép mục nhập ngôn ngữ mHRatica, octave, v.v., nếu không đếm được hàm mean (), để thực hiện nó sẽ ở đây 62 byte cũng rất tốt

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))


Lịch sử

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.