คำนวณพี (ไม่ใช่ Pi)


73

ไม่ฉันไม่ได้หมายถึงและϕ = 1.618... π = 3.14159...ผมหมายถึงฟังก์ชั่น

  • φ (x)คือจำนวนของจำนวนเต็มน้อยกว่าหรือเท่ากับไปที่มีความสำคัญที่จะxx
  • π (x)เป็นจำนวน primes xน้อยกว่าหรือเท่ากับ
  • ขอบอกว่า "ไม่ได้ปี่" แล้วเธ (x) และกำหนดให้เป็นหมายเลขของคอมโพสิตxน้อยกว่าหรือเท่ากับ

งาน

ป.ร. ให้ไว้เป็นจำนวนเต็มบวกอย่างเคร่งครัดx, คำนวณφ (เธ (x)) การให้คะแนนอยู่ในหน่วยไบต์

ตัวอย่าง

แต่ละบรรทัดประกอบด้วยอินพุต (จาก 1 ถึง 100, รวม) และเอาต์พุตที่สอดคล้องกันคั่นด้วยช่องว่าง

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

ใช้ลิงค์นี้เพื่อคำนวณผลลัพธ์ที่ต้องการสำหรับอินพุตใด ๆ นอกจากนี้ยังมีรายชื่อของปัจจัยการผลิตและผลสำหรับการx <= 1000ให้บริการที่นี่ใน Pastebin (สร้างด้วยโปรแกรม Minkolangนี้)


ลีดเดอร์

นี่คือตัวอย่างข้อมูลเพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

## Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

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

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

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

นอกจากนี้คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างกระดานแต้มนำ:

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


มีการ จำกัด ขนาดของอินพุตหรือไม่
lirtosiast

4
คำถามนี้เป็นส่วยให้กับผู้ใช้PhiNotPiหรือไม่?
โม่

24
@primo ทำไมคุณถึงคิดเช่นนั้น
Mego

2
@primo: มันเป็นแรงบันดาลใจจากชื่อของเขาและแน่นอนปุนกับมัน แต่ไม่ยกย่องส่วยให้เขา
El'endia Starman

1
@ edc65: ใช่อย่างเห็นได้ชัดเมื่อวานนี้ฉันพบ
El'endia Starman

คำตอบ:


27

GS2 , 12 10 ไบต์

V@'◄l.1&‼l

ซอร์สโค้ดใช้การเข้ารหัสCP437 ลองออนไลน์!

ทดสอบการทำงาน

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

มันทำงานอย่างไร

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
ชื่อไฟล์ยาวกว่าโปรแกรม
Floris

43

Regex (.NET) 122 122ไบต์

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

สมมติว่าอินพุตและเอาต์พุตอยู่ในสภาวะเดียวกันและเอาต์พุตถูกนำมาจากการจับคู่หลักของ regex

รายละเอียดของ regex:

  • ^(?=((?=.*$(?<=^(\3+(.+.))(.*?(?>(.\4)?)))).)+(.*)) คำนวณπ̅ (x) และจับส่วนที่เหลือของสตริงในการจับภาพกลุ่ม 6 สำหรับการยืนยันในส่วนที่สอง

    • .*$ตั้งค่าตัวชี้ไปยังจุดสิ้นสุดของสตริงเพื่อให้เรามีจำนวนเต็มxในทิศทางเดียว
    • (?<=^(\3+(.+.))(.*?(?>(.\4)?))) จับคู่จากขวาไปซ้ายและตรวจสอบหมายเลขคอมโพสิตโดยวนลูปจาก x เป็น 0
      • (.*?(?>(.\4)?))คือ "ตัวแปร" ซึ่งเริ่มต้นจาก 0 ในการวนซ้ำครั้งแรกและดำเนินการต่อจากหมายเลขในการวนซ้ำก่อนหน้านี้และวนซ้ำจนถึง x เนื่องจากหมายเลขคอมโพสิตที่เล็กที่สุดคือ 4 จะ(.\4)?ไม่ล้มเหลวในการจับคู่หากจับภาพกลุ่ม 4 ได้
      • ^(\3+(.+.))ตรวจสอบสิ่งที่เหลืออยู่โดย "ตัวแปร" ด้านบน (เช่นx - "variable") ไม่ว่าจะเป็นจำนวนประกอบ
  • ((?=.*(?=\6$)(?<=(?!(.+.)\8*(?=\6$)(?<=^\8+))(.+?(?>\9?)))).)+คำนวณφ (เธ (x)) โดยการ จำกัด (?=\6$)การดำเนินงานจากซ้ายไปขวา

    • .*(?=\6$)ตั้งตัวชี้ไปที่ตำแหน่งπ̅ (x) ลองแทน y = π̅ (x)
    • (?<=(?!(.+.)\8*(?=\6$)(?<=^\8+))(.+?(?>\9?))) จับคู่จากขวาไปซ้ายและตรวจสอบความสัมพันธ์ที่สำคัญโดยการวนซ้ำจาก (y - 1) ถึง 0
      • (.+?(?>\9?)) เป็น "ตัวแปร" ซึ่งเริ่มต้นจาก 1 ในการทำซ้ำครั้งแรกและดำเนินการต่อจากหมายเลขในการทำซ้ำก่อนหน้านี้และลูปถึง y
      • (?!(.+.)\8*(?=\6$)(?<=^\8+))จับคู่จากซ้ายไปขวา 1และตรวจสอบว่า "ตัวแปร" และ y เป็นญาติที่สำคัญ
        • (.+.)\8*(?=\6$) เลือกตัวหารของ "ตัวแปร" ซึ่งมีขนาดใหญ่กว่า 1 และผลข้างเคียงคือเรามีจำนวน y ทั้งหมดทางด้านซ้าย
        • (?<=^\8+) ตรวจสอบว่าตัวหารของ "ตัวแปร" ยังเป็นตัวหารของ y

1ใน. NET การค้นหาล่วงหน้าตั้งค่าทิศทางเป็น LTR แทนการติดตามทิศทางปัจจุบัน look-behind กำหนดทิศทางเป็น RTL แทนที่จะกลับทิศทาง

ทดสอบ regex ที่RegexStorm

การแก้ไข 2วางกลุ่มที่ไม่ถูกดักจับและใช้กลุ่มอะตอมมิกแทนที่จะใช้ไวยากรณ์ตามเงื่อนไข


24
ท่านเป็นบ้า
RK

9
เขาได้สัมผัสกับ Zalgo ฉันคิดว่า
อยากรู้อยากเห็น dannii

11
และตอนนี้คุณมีปัญหาสองข้อ (อย่างจริงจังไม่มีความคิดที่คุณสามารถทำสิ่งนี้กับ Regex ... )
Darrel Hoffman

21

J, 15 14 ไบต์

5 p:<:-_1 p:>:

นี่คือคำกริยาที่มีความหมายเดียว ลองมันออนไลน์กับJ.js

มันทำงานอย่างไร

                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
ฉันสามารถอธิบายได้ไหม : P
anOKsquirrel

23
i haz เพิ่มคำอธิบาย
เดนนิส

5
ผมกำลังจะบอกว่าฉันได้ upvoted นี้เพราะมันมีจำนวนมากรอยยิ้ม แต่ข้อความบอกให้หลีกเลี่ยงการ :( ผู้
Doddy

@Dennis: คำตอบแรกของคุณทำให้ฉันหัวเราะได้ยากขอบคุณสำหรับสิ่งนั้น!
Mehrdad

19

อย่างจริงจัง 27 ไบต์

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

Yay ฉันเอาชนะ CJam! ลองออนไลน์

คำอธิบาย ( aหมายถึงด้านบนของสแต็กbหมายถึงสองจากบน):

,;       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

หมายเหตุ: เนื่องจากการโพสต์คำตอบนี้ฉันได้เพิ่มฟังก์ชั่น pi และ phi ลงในอย่างจริงจัง นี่คือคำตอบที่ไม่สามารถแข่งขันได้กับฟังก์ชั่นเหล่านั้น:

,;▓1-@-▒

คำอธิบาย (บางคำสั่งถูกเลื่อนเป็นไม่ทับซ้อนกัน):

,    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
คุณชนะอย่างจริงจัง @Dennis!
TanMath

กรุณาอย่าบอกฉันคุณรู้เรื่องนี้ที่ด้านบนของหัวของคุณ ..
DividedByZero

1
GJ เต้น CJam =)
ข้อผิดพลาด

14

จูเลีย52 52ไบต์

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

สิ่งนี้จะสร้างฟังก์ชั่นที่ไม่มีชื่อที่ยอมรับและจำนวนเต็มและส่งกลับจำนวนเต็ม f=x->...เรียกว่าให้มันชื่อเช่น

Ungolfed:

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

ใช้sumแทนcountการบันทึกอักขระสองสามตัว มันเป็นที่น่าผิดหวังเล็กน้อยแม้ว่า - วิธีการอื่น ๆ ในการนับจำนวนเฉพาะที่เป็นตรงยาวเช่นเดียวกับsum(isprime,1:x) endof(primes(x))
เกลน O

1
ขอขอบคุณสำหรับข้อเสนอแนะ @GlenO แต่sumล้มเหลวสำหรับคอลเลกชันที่ว่างเปล่าในขณะที่countผลตอบแทน 0. ดังนั้นจะไม่ผลิตผลลัพธ์ที่ต้องการสำหรับsum x<4
Alex A.

8

Mathematica ขนาด 24 ไบต์

EulerPhi[#-PrimePi@#-1]&

2
ของหลักสูตร Mathematica มีทั้งหมดนี้สร้างขึ้นใน ...
ตบมือ

@ConfusedMr_C แน่นอน :) แต่มันก็ไม่ได้ตัดสิทธิ์สำหรับเหตุผลที่ชัดเจน: ซอฟแวร์ทางคณิตศาสตร์ไม่สามารถชนะการเล่นกอล์ฟ languges ในงาน combinatorial ง่าย :)
โย'

@ConfusedMr_C PhiNotPi@#&: 11 ไบต์: P
LegionMammal978

8

Pyth, 14 ไบต์

JlftPTSQ/iLJJ1

สาธิต , ตรวจสอบ

Jเราคำนวณคอมโพสิตโดยใช้ตัวกรองที่เรียบง่ายใช้ความยาวของมันและบันทึกลงใน จากนั้นเราใช้ gcd ของJกับตัวเลขทุกจำนวนJและนับจำนวนผลลัพธ์เท่ากัน 1


7

Minkolang 0.11 , 12 ไบต์ (ไม่แข่งขัน)

คำตอบนี้ไม่สามารถแข่งขันได้ ฉันใช้ pi และ phi เป็นบิวด์อินก่อนที่จะโพสต์คำถามซึ่งทำให้ฉันได้เปรียบอย่างไม่เป็นธรรม ฉันโพสต์สิ่งนี้เฉพาะสำหรับผู้ที่สนใจภาษา

nd9M-1-9$MN.

ลองที่นี่

คำอธิบาย

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
ผมไม่คิดว่าการเผยแพร่คำตอบที่ไม่ถูกต้องเป็นความคิดที่ดี ...
เยติ

20
ตราบใดที่พวกเขามีข้อจำกัดความรับผิดชอบฉันไม่คิดว่าจะมีอะไรผิดปกติกับมัน จริงๆแล้วมันเป็นเรื่องธรรมดาสำหรับความท้าทายที่เก่ากว่า
เดนนิส

4
@yeti: ในทางเทคนิคแล้วมันไม่ถูกต้อง คุณลักษณะทั้งหมดที่ใช้ในที่นี้ถูกนำไปใช้ก่อนที่จะมีการโพสต์ความท้าทาย ฉันเพียงแค่ตัดสิทธิ์เนื่องจากฉันโพสต์ความท้าทายจนกว่าจะมีการใช้งานคุณสมบัติเฉพาะสองอย่าง (ซึ่งฉันใช้เพื่อสร้างรายการตัวอย่างโดยบังเอิญ)
El'endia Starman

1
เหมือนกัน. ฉันทำสิ่งนี้บ่อยเมื่อ𝔼𝕊𝕄𝕚𝕟ได้รับการปรับปรุง
Mama Fun Roll

6

CJam, 28 ไบต์

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

ลองใช้ซอนี้ในล่าม CJam หรือตรวจสอบกรณีทดสอบทั้งหมดในครั้งเดียว

มันทำงานอย่างไร

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.

ฉันพยายามลิงก์ "ตรวจสอบทุกกรณี" 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111และได้รับนี้: นั่นถูกต้องใช่ไหม?
El'endia Starman

ใช่มันจะตรวจสอบว่าการใช้รหัสกับคอลัมน์ซ้าย (อินพุต) เท่ากับคอลัมน์ขวา (เอาท์พุท)
Dennis

5
ฉันสามารถอธิบายคำอธิบายบน dis1 ได้ไหม?
anOKsquirrel

9
@anOKsquirrel ฉัน Haz อธิบาย dis1 2
Dennis

5
@Dennis kthxbai
anOKsquirrel

5

Python, 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
ฉันคิดว่าคุณสามารถบันทึก 2 ไบต์โดยการลบช่องว่างระหว่างrange(n) ifและ])) if
DankMemes

3
เนื่องจากความสามารถในการเล่นกอล์ฟของ Python ค่อนข้างต่ำ (เนื่องจากความต้องการพื้นที่ว่าง ฯลฯ ) สิ่งนี้น่าประทับใจทีเดียว!
felixphew

@DankMemes ขอบคุณสำหรับเคล็ดลับ!
wnnmaw

5

เรติน่า 48 ไบต์

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

ลองออนไลน์!

คำอธิบาย

.+
$*

แปลงอินพุตเป็น unary

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

นับจำนวนคอมโพสิตไม่เกินจำนวนอินพุตโดยนับความถี่ที่เราสามารถจับคู่สตริงที่ประกอบด้วยการทำซ้ำอย่างน้อยสองครั้งของปัจจัยอย่างน้อย 2

.+
$*

แปลงเป็นเอกอีกครั้ง

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

คำนวณφด้วยการนับจากจำนวนตำแหน่งที่ไม่สามารถหาปัจจัย (อย่างน้อย 2) ของคำต่อท้ายจากตำแหน่งนั้นซึ่งเป็นปัจจัยของคำนำหน้าด้วย (หากเราพบปัจจัยดังกล่าวแล้วปัจจัยนี้จะi <= nใช้ร่วมกับnดังนั้นจึงไม่ใช่ coprime) .ที่สิ้นสุดเพื่อให้แน่ใจว่าเราจะไม่นับรวมศูนย์ (ที่เราไม่สามารถหาปัจจัยอย่างน้อย 2)


5

Regex (.NET), 88 86 ไบต์

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

ลองออนไลน์! (เป็นโปรแกรม Retina)

ใช้ I / O เดียวกับคำตอบของ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳นั่นคืออินพุตแบบยูนารีและตรงกับสตริงย่อยของความยาวของผลลัพธ์

อาจเป็นไปได้ที่จะย่อให้สั้นลงอีกโดยแทนที่หนึ่งหรือทั้งสองกลุ่มสมดุลด้วยการอ้างอิงไปข้างหน้า

ทางเลือกที่นับไบต์เดียวกัน:

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

นอกจากนี้ยังมีทางเลือกบางอย่างสำหรับครึ่งแรกเช่นการใช้ lookahead เชิงลบแทนที่จะเป็นเชิงบวกสำหรับตัวเลขที่ประกอบกันหรือใช้เงื่อนไขที่มีเช่นกัน

คำอธิบาย

ฉันจะสมมติว่าคุณมีความเข้าใจพื้นฐานของความสมดุลของกลุ่มแต่ในระยะสั้นจับภาพกลุ่มใน .NET มีสแต็ค (ดังนั้นทุกครั้งที่คุณนำมาใช้ใหม่กลุ่มจับจับใหม่จะผลักดันด้านบน) และปรากฏการจับภาพจากกอง(?<-x>...) xมันมีประโยชน์มากสำหรับการนับสิ่งของ

^                   # 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

เยลลี่ไม่ใช่การแข่งขัน

7 ไบต์ คำตอบนี้ไม่ใช่การแข่งขันเนื่องจากใช้ภาษาที่โพสต์ความท้าทาย

ÆC_@’ÆṪ

มันทำงานอย่างไร

Æ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

คู่, 52 51

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

แก้ไข: บันทึก 1 ไบต์ขอบคุณ Thomas Kwa

คำอธิบาย:

@(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 ไบต์

euler_phi(n-1-prime_pi(n))

ทำงานได้ดีแม้กระทั่งn=0และn=1ต้องขอบคุณ Sage ที่ใช้


3

เยลลี่ 6 ไบต์

_ÆC’ÆṪ

ลองออนไลน์!

นี่คือความร่วมมือระหว่างcaird coinheringahhingและMr. Xcoderในการแชท

คำอธิบาย

_ÆC'ÆṪ ~ โปรแกรมเต็มรูปแบบ

 ÆC ~ นับจำนวนเฉพาะน้อยกว่าหรือเท่ากับ Z
_ ~ ลบออกจากอินพุต
   '~ ลดลง
    tot ~ ฟังก์ชั่น totient ของออยเลอร์



2

MATL , 9 ไบต์ (ไม่ใช่การแข่งขัน)

คำตอบนี้ไม่ใช่การแข่งขันเนื่องจากภาษาโพสต์ความท้าทาย

:Zp~sq_Zp

ใช้เวอร์ชัน (10.1.0)ของภาษา / คอมไพเลอร์

ลองออนไลน์!

คำอธิบาย

:       % 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 ไบต์

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

Number(l,p)นับว่าหลายองค์ประกอบจากความพึงพอใจl pเพื่อชดเชยความจริงที่ว่า 1 ไม่ใช่ทั้งไพรม์และคอมโพสิตฉันต้องลบจาก n หนึ่งมากกว่าจำนวนเฉพาะถึง n แทนที่จะทำ-1สองไบต์ฉันจะเริ่มต้นรายการด้วย -2 แทนที่จะเป็น 1 หรือ 2 ดังนั้นจึงเพิ่มหมายเลขอีกหนึ่งหมายเลขที่ถือว่าเป็นไพรม์โดยIsPrimeใช้เพียงหนึ่งไบต์พิเศษ


2

Python 3.5 - 130 ไบต์

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

หากไม่สามารถส่งผ่านฟังก์ชันผ่านเป็น p (n, 0,0) แล้ว +3 ไบต์

สิ่งนี้ใช้ประโยชน์จากความจริงที่ว่าฉันใช้ทฤษฎีบทของวิลสันเพื่อตรวจสอบว่าตัวเลขประกอบและต้องโทรเข้าสู่โมดูลคณิตศาสตร์สำหรับฟังก์ชันแฟกทอเรียล Python 3.5 เพิ่มฟังก์ชั่น gcd ในโมดูลคณิตศาสตร์

ลูปแรกของโค้ดจะเพิ่มขึ้นทีละหนึ่งถ้าจำนวนนั้นเป็นคอมโพสิตและเพิ่มขึ้นอีก 0 อย่างชาญฉลาด (แม้ว่าทฤษฎีบทของวิลสันจะมี แต่จำนวนเต็มมากกว่า 1 แต่ถือว่า 1 เป็นไพร์มดังนั้นช่วยให้เราสามารถใช้ประโยชน์จากสิ่งนี้ได้)

การวนซ้ำครั้งที่สองจะวนซ้ำในช่วงจำนวนคอมโพสิตและเพิ่มค่า g เฉพาะเมื่อค่าที่ไม่ใช่ pi และ l เป็นค่าร่วม

g คือจำนวนค่าน้อยกว่าหรือเท่ากับจำนวนคอมโพสิตน้อยกว่าหรือเท่ากับ n



1

05AB1E , 11 8 ไบต์

LDpÈÏg<Õ

ลองออนไลน์!

นี่อาจไม่ใช่การแข่งขัน - ฉันไม่สามารถทราบได้เมื่อสร้าง 05AB1E

มันทำงานอย่างไร

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 ไบต์

řṗ¬Ʃ⁻Ț

คำอธิบาย:

                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


ลองออนไลน์!


1

APL NARS, 38 ไบต์, 19 ตัวอักษร

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

13πเป็นฟังก์ชัน totient และ 2ient คือฟังก์ชัน count prime <= อาร์กิวเมนต์ ทดสอบ

  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

เพิ่ม ++ , 21 ไบต์

L,RþPbL1_dRdVÞ%bLG!!+

ลองออนไลน์!

มันทำงานอย่างไร

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

π¯(n)

RþPbL1_

RþPþPbL1_x=π¯(n)

φ(n)

dRdVÞ%bLG!!+

xdRÞ%xxbL

n1nG!!

ใช่ฉันต้องการลอง LaTex ใหม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.