Tính Phi (không phải Pi)


73

Không, tôi không có ý ϕ = 1.618...π = 3.14159.... Ý tôi là các chức năng .

  • (x) là số nguyên nhỏ hơn hoặc bằng số nguyên xtương đối x.
  • π (x) là số lượng các số nguyên tố nhỏ hơn hoặc bằng x.
  • Chúng ta hãy nói rằng "không pi" sau đó là π̅ (x) và định nghĩa nó là số lượng vật liệu tổng hợp nhỏ hơn hoặc bằng x.

Bài tập, nhiệm vụ

Cho một số nguyên dương hoàn toàn x, tính (π̅ (x)) . Ghi điểm được tính bằng byte.

Ví dụ

Mỗi dòng bao gồm đầu vào (từ 1 đến 100, đã bao gồm) và đầu ra tương ứng được phân tách bằng khoảng trắng.

1 0 
2 0 
3 0 
4 1 
5 1 
6 1 
7 1 
8 2 
9 2 
10 4 
11 4 
12 2 
13 2 
14 6 
15 4 
16 6 
17 6 
18 4 
19 4 
20 10 
21 4 
22 12 
23 12 
24 6 
25 8 
26 8 
27 16 
28 6 
29 6 
30 18 
31 18 
32 8 
33 12 
34 10 
35 22 
36 8 
37 8 
38 20 
39 12 
40 18 
41 18 
42 12 
43 12 
44 28 
45 8 
46 30 
47 30 
48 16 
49 20 
50 16 
51 24 
52 12 
53 12 
54 36 
55 18 
56 24 
57 16 
58 40 
59 40 
60 12 
61 12 
62 42 
63 20 
64 24 
65 22 
66 46 
67 46 
68 16 
69 42 
70 20 
71 20 
72 32 
73 32 
74 24 
75 52 
76 18 
77 40 
78 24 
79 24 
80 36 
81 28 
82 58 
83 58 
84 16 
85 60 
86 30 
87 36 
88 32 
89 32 
90 48 
91 20 
92 66 
93 32 
94 44 
95 24 
96 70 
97 70 
98 24 
99 72 
100 36

Sử dụng liên kết này để tính toán đầu ra dự kiến ​​cho bất kỳ đầu vào. Ngoài ra, một danh sách các đầu vào và đầu ra cho x <= 1000được cung cấp ở đây trên pastebin . (Được tạo bằng chương trình Minkolang này .)


Bảng xếp hạng

Dưới đây là Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

## Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ của thông dịch viên), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

## Perl, 43 + 2 (-p flag) = 45 bytes

Bạn cũng có thể đặt tên ngôn ngữ thành một liên kết mà sau đó sẽ hiển thị trong đoạn trích bảng xếp hạng:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


Có giới hạn về kích thước của đầu vào?
lirtosiast

4
Câu hỏi này có phải là một cống nạp cho người dùng PhiNotPi không?
primo

24
@primo Tại sao bạn lại nghĩ vậy?
Mego

2
@primo: Nó được lấy cảm hứng từ tên của anh ấy, và chắc chắn là một cách chơi chữ với nó, nhưng không chính xác là một cống nạp cho anh ấy.
El'endia Starman

1
@ edc65: Vâng, rõ ràng là như vậy , như tôi đã tìm ra ngày hôm qua.
El'endia Starman

Câu trả lời:


27

GS2 , 12 10 byte

V@'◄l.1&‼l

Mã nguồn sử dụng mã hóa CP437 . Hãy thử trực tuyến!

Chạy thử nghiệm

$ xxd -r -ps <<< 564027116c2e3126136c > phinotpi.gs2
$ wc -c phinotpi.gs2 
10 phinotpi.gs2
$ gs2 phinotpi.gs2 <<< 1000
552

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

V          Read an integer n from STDIN.
 @         Push a copy of n.
  '        Increment the copy of n.
   ◄l      Push 1 and call primes; push the list of all primes below n+1.
     .     Count the primes.
      1    Subtract the count from n.
       &   Decrement to account for 1 (neither prime nor composite).
        ‼l Push 3 and call primes; apply Euler's totient function.

25
Tên tập tin dài hơn chương trình.
Floris

43

Regex (.NET), 122 113 byte

^(?=((?=.*$(?<=^(\3+(.+.))(.*?(?>(.\4)?)))).)+(.*))((?=.*(?=\6$)(?<=(?!(.+.)\8*(?=\6$)(?<=^\8+))(.+?(?>\9?)))).)+

Giả sử đầu vào và đầu ra là đơn nhất, và đầu ra được lấy từ kết quả khớp chính của regex.

Sự cố của regex:

  • ^(?=((?=.*$(?<=^(\3+(.+.))(.*?(?>(.\4)?)))).)+(.*)) tính toán π̅ (x) và bắt phần còn lại của chuỗi trong việc bắt nhóm 6 để xác nhận trong phần thứ hai.

    • .*$đặt con trỏ ở cuối chuỗi để chúng ta có toàn bộ số xtheo một hướng.
    • (?<=^(\3+(.+.))(.*?(?>(.\4)?))) khớp từ phải sang trái và kiểm tra số hỗn hợp bằng cách lặp từ x đến 0.
      • (.*?(?>(.\4)?))là một "biến" bắt đầu từ 0 trong lần lặp đầu tiên và tiếp tục từ số trong lần lặp trước đó và các vòng lặp lên đến x. Vì số hỗn hợp nhỏ nhất là 4, (.\4)?không bao giờ không khớp nếu bắt được nhóm 4.
      • ^(\3+(.+.))kiểm tra những gì còn lại của "biến" ở trên (tức là x - "variable") xem đó có phải là số tổng hợp không.
  • ((?=.*(?=\6$)(?<=(?!(.+.)\8*(?=\6$)(?<=^\8+))(.+?(?>\9?)))).)+tính toán (π̅ (x)), bằng cách giới hạn các thao tác từ trái sang phải với (?=\6$).

    • .*(?=\6$)đặt con trỏ đến vị trí π̅ (x). Hãy biểu thị y = π̅ (x).
    • (?<=(?!(.+.)\8*(?=\6$)(?<=^\8+))(.+?(?>\9?))) khớp từ phải sang trái và kiểm tra số nguyên tố tương đối bằng cách lặp từ (y - 1) đến 0
      • (.+?(?>\9?)) là một "biến" bắt đầu từ 1 trong lần lặp đầu tiên và tiếp tục từ số trong lần lặp trước đó và các vòng lặp lên đến y
      • (?!(.+.)\8*(?=\6$)(?<=^\8+))khớp từ trái sang phải 1 và kiểm tra xem "biến" và y có phải là số nguyên tố tương đối hay không.
        • (.+.)\8*(?=\6$) chọn một ước số của "biến" lớn hơn 1 và một tác dụng phụ là chúng ta có toàn bộ số y ở bên trái.
        • (?<=^\8+) kiểm tra xem ước số của "biến" có phải là ước của y không.

1 Trong .NET, nhìn về phía trước đặt hướng thành LTR thay vì theo hướng hiện tại; nhìn phía sau đặt hướng sang RTL thay vì đảo ngược hướng.

Kiểm tra regex tại RegexStorm .

Bản sửa đổi 2 loại bỏ các nhóm không bắt giữ và sử dụng các nhóm nguyên tử thay vì cú pháp có điều kiện.


24
Thưa bạn, bạn đang điên
RK.

9
Tôi nghĩ rằng anh ấy đã chạm vào Zalgo.
tò mò

11
Và bây giờ bạn có hai vấn đề. (Nghiêm túc không có ý tưởng bạn có thể làm điều này với Regex ...)
Darrel Hoffman

21

J, 15 14 byte

5 p:<:-_1 p:>:

Đây là một động từ ngầm, đơn điệu. Dùng thử trực tuyến với J.js .

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

                Right argument: y
            >:  Increment y.
       _1 p:    Calculate the number of primes less than y+1.
    <:          Decrement y.
      -         Calculate the difference of the results to the left and right.
5 p:            Apply Euler's totient function to the difference.

14
tôi có thể giải thích haz? : P
anOKsquirrel

23
i haz thêm lời giải thích
Dennis

5
Tôi đã định nói rằng tôi đã nâng cao điều này bởi vì nó có rất nhiều mặt cười, nhưng văn bản nói với tôi rằng hãy tránh những thứ đó :(
Doddy

@Dennis: Câu trả lời đầu tiên của bạn khiến tôi cười khá nhiều, cảm ơn vì điều đó!
Mehrdad

19

Nghiêm túc , 27 byte

,;R`p`MΣ(-D;n;;╟@RZ`ig1=`MΣ

Yay, tôi đã đánh bại CJam! Dùng thử trực tuyến

Giải thích ( ađề cập đến đỉnh của ngăn xếp, bđề cập đến thứ hai từ trên xuống):

,;       take input and duplicate it
R`p`MΣ   push sum([is_prime(i) for i in [1,...,a]]) (otherwise known as the pi function)
(-D      rotate stack right by 1, subtract top two elements, subtract 1, push
            (@ could be used instead of (, but I was hoping the unmatched paren would bother someone)
;n;;     dupe top, push a b times, dupe top twice (effectively getting a a+1 times)
╟        pop n, pop n elements and append to list, push
@        swap top two elements
RZ       push [1,...,a], zip a and b
`ig1=`   define a function:
  i        flatten list
  g1=      compute gcd(a,b), compare to 1 (totient function)
MΣ       perform the function a on each element of b, sum and push

Lưu ý: kể từ khi đăng câu trả lời này, tôi đã thêm các hàm pi và phi vào Nghiêm túc. Đây là một câu trả lời không cạnh tranh với các chức năng đó:

,;▓1-@-▒

Giải thích (một số lệnh được chuyển sang không chồng lấp các lệnh khác):

,    get input (hereafter referred to as x)
;    duplicate x
 ▓   calculate pi(x) (we'll call this p)
1-   calculate 1-p
@-   bring x back on top, calculate x-1-p (not pi(x))
  ▒  calculate phi(not pi(x))

1
Bạn đã NGHIÊM TÚC NGHIÊM TRỌNG @Dennis!
TanMath

Xin đừng nói với tôi rằng bạn biết điều này trên đỉnh đầu của bạn ..
DividedByZero

1
GJ đánh bại CJam =)
flawr

14

Julia, 52 50 byte

x->count(i->gcd(i,p)<2,1:(p=x-endof(primes(x))-1))

Điều này tạo ra một hàm không tên chấp nhận và số nguyên và trả về một số nguyên. Để gọi nó, đặt tên cho nó, vd f=x->....

Ung dung:

function phinotpi(x::Integer)
    # The number of composites less than or equal to x is
    # x - the number of primes less than or equal to x -
    # 1, since 1 is not composite
    p = x - length(primes(x)) - 1

    # Return the number of integers i between 1 and p such
    # that gcd(i, p) = 1. This occurs when i is relatively
    # prime to p.
    count(i -> gcd(i, p) == 1, 1:p)
end

Sử dụng sumthay vì countđể lưu một vài ký tự. Tuy nhiên, có một chút bực bội - cách khác để đếm các số nguyên tố sum(isprime,1:x), có độ dài chính xác như endof(primes(x)).
Glen O

1
@GlenO Cảm ơn bạn đã gợi ý, nhưng sumkhông thành công cho các bộ sưu tập trống trong khi counttrả về 0. Do đó sumsẽ không tạo ra kết quả mong muốn cho x<4.
Alex A.

8

Toán học, 24 byte

EulerPhi[#-PrimePi@#-1]&

2
Tất nhiên Mathicala có tất cả những thứ này được xây dựng trong ...
vỗ tay vào

@ConfuseMr_C Rõ ràng :) Tuy nhiên, điều đó không đủ tiêu chuẩn, vì một lý do rõ ràng: phần mềm toán học không thể đánh bại các võ sĩ golf trong các nhiệm vụ kết hợp đơn giản :)
yo '

@ConfuseMr_C PhiNotPi@#&: 11 byte: P
LegionMammal978

8

Bình thường, 14 byte

JlftPTSQ/iLJJ1

Trình diễn , Verifier

Chúng tôi tính toán vật liệu tổng hợp bằng bộ lọc đơn giản, lấy chiều dài của nó và lưu nó vào J. Sau đó, chúng tôi lấy gcd của Jmỗi số lên đến Jvà đếm xem có bao nhiêu kết quả bằng 1.


7

Minkolang 0.11 , 12 byte (KHÔNG cạnh tranh)

Câu trả lời này KHÔNG cạnh tranh. Tôi đã triển khai pi và phi dưới dạng tích hợp trước khi tôi đăng câu hỏi, điều này mang lại cho tôi một lợi thế không công bằng. Tôi chỉ đăng bài này cho những người quan tâm đến ngôn ngữ.

nd9M-1-9$MN.

Hãy thử nó ở đây.

Giải trình

n      Read in integer from input
d      Duplicate
9M     Pops off the top of stack as x and pushes pi(x)
-      Subtracts the top two elements on the stack (x - pi(x))
1-     Subtracts 1 (x-1 - pi(x))
9$M    Pops off the top of stack as x and pushes phi(x) (phi(x-1 - pi(x)))
N.     Outputs as integer and stops.

2
Tôi không nghĩ xuất bản các câu trả lời không hợp lệ là một ý tưởng hay ...
yeti

20
Miễn là họ từ chối trách nhiệm, tôi không nghĩ có gì sai với nó. Nó thực sự khá phổ biến cho những thách thức cũ.
Dennis

4
@yeti: Về mặt kỹ thuật, nó không hợp lệ. Các tính năng được sử dụng ở đây đều được triển khai trước khi thử thách được đăng. Tôi chỉ đơn giản là không đủ điều kiện vì tôi đã trì hoãn việc đăng thử thách cho đến khi hai tính năng cụ thể được triển khai (mà tôi đã sử dụng để tạo danh sách ví dụ, tình cờ).
El'endia Starman

1
Tương tự. Tôi làm điều này rất nhiều khi tiếp tục được cập nhật.
Mama Fun Roll

6

CJam, 28 byte

ri){mf1>},,_,f{){_@\%}h)=}1b

Hãy thử điều này trong trình thông dịch của CJam hoặc xác minh tất cả các trường hợp kiểm tra cùng một lúc .

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

ri                            Read an integer N from STDIN.
  )                           Increment it. 
   {    },                    Filter; for each I in [0 ... N]:
    mf                          Push I's prime factorization.
      1>                        Discard the first prime.
                              If there are primes left, keep I.
          ,                   Count the kept integers. Result: C
           _,                 Push [0 ... C-1].
             f{          }    For each J in [0 ... C-1], push C and J; then:
               )                Increment J.
                {    }h         Do:
                 _                Push a copy of the topmost integer..
                  @               Rotate the integer below on top of it.
                   \%             Take that integer modulo the other integer.
                                If the residue is non-zero, repeat the loop.
                                This computes the GCD of C and J+1 using the
                                Euclidean algorithm.
                       )        Increment the 0 on the stack. This pushes 1.

                        =     Push 1 if the GCD is 1, 0 if not.
                          1b  Add all Booleans.

Tôi đã thử liên kết "xác minh tất cả các trường hợp" và nhận được điều này : 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111. Có đúng không?
El'endia Starman

Có, nó kiểm tra rằng áp dụng mã cho cột bên trái (đầu vào) bằng với cột bên phải (đầu ra).
Dennis

5
tôi có thể giải thích haz trên dis1?
anOKsquirrel

9
@anOKsquirrel i haz đã giải thích dis1 2
Dennis

5
Kthxbai @Dennis
anOKsquirrel

5

Con trăn, 137 139

n=input()
print n,len([b for b in range(len([a for a in range(n)if not all(a%i for i in xrange(2,a))]))if all(b%i for i in xrange(2,b))])

2
Tôi nghĩ bạn có thể tiết kiệm 2 byte bằng cách xóa khoảng trắng giữa range(n) if])) if
DankMeme

3
Với khả năng chơi gôn tương đối thấp của Python (vì yêu cầu về khoảng trắng, v.v.), điều này khá ấn tượng!
felixphew

@DankMeme, cảm ơn vì tiền boa!
wnnmaw

5

Võng mạc , 48 byte

.+
$*
M&`(..+)\1+$
.+
$*
(?!(..+)\1*$(?<=^\1+)).

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

Giải trình

.+
$*

Chuyển đổi đầu vào thành unary.

M&`(..+)\1+$

Đếm số hỗn hợp không lớn hơn đầu vào bằng cách đếm tần suất chúng ta có thể khớp với một chuỗi bao gồm ít nhất hai lần lặp lại của một yếu tố ít nhất là 2.

.+
$*

Chuyển đổi sang unary một lần nữa.

(?!(..+)\1*$(?<=^\1+)).

Tính bằng cách tính từ bao nhiêu vị trí, không thể tìm thấy một yếu tố (ít nhất là 2) của hậu tố từ vị trí đó cũng là một yếu tố của tiền tố (nếu chúng ta tìm thấy một yếu tố như vậy thì điều này i <= nchia sẻ một yếu tố với ndo đó không phải là nguyên nhân của nó). Các .cuối cùng đảm bảo rằng chúng tôi không được tính không (mà chúng không thể tìm thấy một yếu tố ít nhất là 2).


5

Regex (.NET), 88 86 byte

^(?=((?=(..+)\2+$)?.)+)(?=(?<-2>.)*(.+))(?=(((?!(..+)\6*(?<=^\6+)\3$))?.)*\3)(?<-5>.)*

Hãy thử trực tuyến! (Là một chương trình Retina.)

Sử dụng cùng I / O như câu trả lời của n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ , tức là đầu vào đơn nguyên và nó khớp với một chuỗi con có độ dài của kết quả.

Có thể rút ngắn điều này hơn nữa bằng cách thay thế một hoặc cả hai nhóm cân bằng bằng các tham chiếu chuyển tiếp.

Thay thế ở cùng một số byte:

^(?=((?=(..+)\2+$)?.)+)(?=(?<-2>.)*(.+))(?=(?((..+)\4*(?<=^\4+)\3$).|(.))*\3)(?<-5>.)*

Ngoài ra còn có một số lựa chọn thay thế cho nửa đầu, ví dụ như sử dụng một cái nhìn tiêu cực thay vì một cái tích cực cho các số tổng hợp, hoặc sử dụng một điều kiện ở đó là tốt.

Giải trình

Tôi sẽ cho rằng bạn có hiểu biết cơ bản về các nhóm cân bằng , nhưng tóm lại, các nhóm bắt trong .NET là các ngăn xếp (vì vậy mỗi lần bạn sử dụng lại nhóm bắt giữ, chụp mới được đẩy lên trên cùng) và (?<-x>...)bật ra một bản chụp từ ngăn xếp x. Điều đó rất hữu ích để đếm mọi thứ.

^                   # Only look at matches from the beginning of the input.
(?=                 # First, we'll compute the number of composites less than
                    # or equal to the input in group 2. This is done in a
                    # lookahead so that we don't actually advance the regex
                    # engine's position in the string.
  (                 #   Iterate through the input, one character at a time.
    (?=(..+)\2+$)?  #     Try to match the remainder of the input as a
                    #     composite number. If so the (..+) will add one
                    #     one capture onto stack 2. Otherwise, this lookahead
                    #     is simply skipped.
    .
  )+
)
(?=                 # It turns out to be more convienient to work with n minus
                    # the number of composites less than or equal to n, and to
                    # have that a single backreference instead of the depth of
                    # a stack.
  (?<-2>.)*         #   Match one character for each composite we found.
  (.+)              #   Capture the remainder of the input in group 3.
)
(?=                 # Now we compute the totient function. The basic idea is
                    # similar to how we computed the number of composites,
                    # but there are a few differences.
                    # a) Of course the regex is different. However, this one
                    #    is more easily expressed as a negative lookahead (i.e.
                    #    check that the values don't share a factor), so this
                    #    won't leave a capture on the corresponding stack. We
                    #    fix this by wrapping the lookahead itself in a group
                    #    and making the entire group optional.
                    # b) We only want to search up the number of composites,
                    #    not up to the input. We do this by asserting that we
                    #    can still match our backreference \3 from earlier.

  (                 #   Iterate through the input, one character at a time.
    ((?!            #     Try not to match a number that shares a factor with
                    #     the number of composites, and if so push a capture
                    #     onto stack 5.
      (..+)\6*      #     Look for a factor that's at least 2...
      (?<=^\6+)     #     Make sure we can reach back to the input with that
                    #     factor...
      \3$           #     ...and that we're exactly at the end of the number
                    #     of composites.
    ))?
    .
  )*
  \3                #   Match group 3 again to make sure that we didn't look
                    #   further than the number of composites.
)
(?<-5>.)*           # Finally, match one character for each coprime number we
                    # found in the last lookahead.


4

Thạch , không cạnh tranh

7 byte Câu trả lời này không cạnh tranh, vì nó sử dụng một ngôn ngữ trì hoãn thử thách.

ÆC_@’ÆṪ

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

ÆC_@’ÆṪ  Input: n

ÆC       Count the primes less than or equal to n.
    ’    Yield n - 1.
  _@     Subtract the count from n - 1.
     ÆṪ  Apply Euler's totient function.

3

Tháng Mười, 52 51

@(b)nnz((d=[1:(c=b-1-nnz(primes(b)))])(gcd(d,c)<2))

Chỉnh sửa: đã lưu 1 byte nhờ Thomas Kwa

Giải trình:

@(b)                                            # Define anonymous func with parameter b
  nnz(                                          # Count elements in φ(c)
    (                                           #
      d = [1:                                   # Create d= array of 1 to π̅(b)
            ( c = b - 1 - nnz(primes(b)) )      # Calculate c=π̅(b) by subtracting the
                                                #  number of elements in the array of prime
          ]                                     #  numbers from the number of ints in 2:b
    )(gcd(d, c) < 2)                            # Calculate φ(c) by using gcd to filter
  )                                             # relative primes from d


3

SageMath 26 byte

euler_phi(n-1-prime_pi(n))

Hoạt động tốt ngay cả đối với n=0n=1, nhờ vào việc thực hiện của Sage.





2

MATL , 9 byte (không cạnh tranh)

Câu trả lời này là không cạnh tranh, vì ngôn ngữ hoãn thách thức.

:Zp~sq_Zp

Sử dụng phiên bản (10.1.0) của ngôn ngữ / trình biên dịch.

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

Giải trình

:       % implicitly input a number "N" and produce array [1,2,...,N]
Zp      % true for entries that are prime
~       % negate. So it gives true for entries of [1,2,...,N] that are non-prime
s       % sum elements of array. So it gives number of non-primes
q       % subtract 1. Needed because number 1 is not prime, but not composite either
_       % unary minus
Zp      % with negative input, computes totient function of absolute value of input
        % implicit display

2

GAP, 33 byte

n->Phi(n-Number([-2..n],IsPrime))

Number(l,p)đếm có bao nhiêu yếu tố từ lthỏa mãn p. Để bù lại cho thực tế rằng 1 không phải là số nguyên tố cũng không phải là tổng hợp, tôi phải trừ đi từ n một số nhiều hơn số lượng các số nguyên tố lên đến n. Thay vì thực hiện -1cho hai byte, tôi bắt đầu danh sách bằng -2 thay vì 1 hoặc 2, do đó thêm một số được coi là số nguyên tố IsPrimechỉ bằng một byte thêm.


2

Python 3,5 - 130 byte

from math import*
def p(n,k,g):
 for i in range(1,n+1):k+=factorial(i-1)%i!=i-1
 for l in range(1,k):g+=gcd(k,l)<2      
 return g

Nếu nó không được chấp nhận để truyền hàm qua dưới dạng p (n, 0,0) thì +3 byte.

Điều này lợi dụng thực tế là tôi sử dụng định lý Wilson để kiểm tra xem một số có phải là tổng hợp hay không và phải gọi vào mô-đun toán học cho hàm giai thừa. Python 3.5 đã thêm một hàm gcd vào mô-đun toán học.

Vòng lặp đầu tiên của mã sẽ tăng k thêm một nếu số đó là tổng hợp và tăng thêm 0 khác. (Mặc dù định lý của Wilson chỉ giữ các số nguyên lớn hơn 1, nhưng nó coi 1 là số nguyên tố, vì vậy cho phép chúng ta khai thác điều này).

Vòng lặp thứ hai sau đó sẽ lặp qua phạm vi số lượng vật liệu tổng hợp và chỉ tăng g khi giá trị của không pi và l là đồng nguyên tố.

g sau đó là số lượng giá trị nhỏ hơn hoặc bằng số lượng số tổng hợp nhỏ hơn hoặc bằng n.



1

05AB1E , 11 8 byte

LDpÈÏg<Õ

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

Điều này có thể không cạnh tranh - Tôi không thể tìm ra khi 05AB1E được thực hiện.

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

L             # this gets us the list of numbers [1 .. a]
 D            # duplicates this list
  p           # applies isPrime to each element of the list, vectorised.
   È          # is the element even? (does 05AB1E not have a logical not?)
    Ï         # push elements of the first list where the same index in the 
              # second list is 1
     g<       # finds the length and subtracts 1 (as the list contains 1)
              # this is the not pi function
       Õ      # euler totient function

1

Pyt , 6 byte

řṗ¬Ʃ⁻Ț

Giải trình:

                Implicit input
ř               Push [1,2,...,input]
 ṗ              [is 1 prime?, is 2 prime?, ..., is input prime?]
  ¬             [is 1 not prime?, is 2 not prime?, ... is input not prime?]
   Ʃ            Number of non-primes (sums the array - booleans implicitly converted to ints)
    ⁻           Subtract one to remove the counting of '1'
     Ț          Euler's totient function


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


1

APL NARS, 38 byte, 19 ký tự

{⍵≤3:0⋄13π¯1+⍵-2π⍵}

13π là hàm tổng và 2π là hàm số nguyên tố đếm <= đối số của nó. Kiểm tra

  b←{⍵≤3:0⋄13π¯1+⍵-2π⍵}     
  (⍳12),¨b¨⍳12
1 0  2 0  3 0  4 1  5 1  6 1  7 1  8 2  9 2  10 4  11 4  12 2 
  (95..100),¨b¨(95..100)
95 24  96 70  97 70  98 24  99 72  100 36

1

Thêm ++ , 21 byte

L,RþPbL1_dRdVÞ%bLG!!+

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

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

π¯(n)φ(n)π¯(n)φ(n)

π¯(n)

RþPbL1_

RþPþPbL1_x=π¯(n)

φ(n)

dRdVÞ%bLG!!+

xdRÞ%xxbL

n1nG!!

Có, tôi thực sự muốn thử LaTex mới

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.