pulsar نوشته: روش خودتان را بیان کنید، مشکلی نیست.
این دو فیلسوف برنامه نویسی بلد نیستند.
پاسخ را باید بدون برنامه نویسی پیدا کنیم.
چشم, ولی بی برنامهنویسی هم همین میشد, تنها کمی زمانبَرتر بود.
pulsar نوشته: افلاتون : سُقرات حاصل ضربِ دو شماره یِ پرهامیِ بزرگتر از 1 و کوچکتر از 100 را به من گفته.
اریستو : به من نیز جمع آن دو شماره را گفته.
افلاتون : نمی توانم آن دو شماره را بیابم.
اریستو : می دانستم که نمی توانی.
افلاتون : می دانستی؟ پس بدان که آن دو شماره را یافتم.
اریستو : پس من نیز آن دو شماره را یافتم.
شیوهیِ فرجامیابی:
١- افلاتون بسشمار (حاصل ظرب) را دارد.
٢- ارستو همفزود را دارد.
٣- ارستو میداند که افلاتون با داستن بسشمار همچنان نمیتواند دو مَر را بیابد.
...
درخورترین نکته اینجا ٣ است که به ما میگوید دو مَر نامبرده نمیتوانند نُخُستمر باشند, زیرا فرآوردهیِ دو نخستمر تنها و تنها به همان دو بخشپذیر خواهد بود, مانند ٥ x ٧ = ٣٥
پس افلاتون مَرهایی را دارد که به بیشتر از یک راه میتوانند فرآورده شوند و برای بدست آوردن همهیِ
آنها ما تنها دو سامهیِ کوچک داریم: همهیِ دو مَرهایی که در بازهیِ ١-١٠٠ بوده و بیش از دو فاکتور داشته باشند:
کد:
# Barâye barresiye noxostmarih (primality):
is_prime = lambda a: all(a % i for i in range(2, a))
در سویِ دیگر, همفزود دو مَر, بگوییم ٨ اینگونه بدست میاید:
٨ = ٧ + ١ —> نادرست, زیرا بازهیِ ما از ١ بزرگتر و نه خود ١ است.
٨ = ٦ + ٢
٨ = ٥ + ٣
٨ = ٤ + ٤
٨ = ٣ + ٥
٨ = ٢ + ٦
٨ = ١ + ٧ —> نادرست
که کُد بدست آوردن این هم میشود:
کد:
import math
def poss(x):
ret = [(a,b) for a in range(2, x) for b in range(2,x) if a + b == x];
return ret[:math.ceil(len(ret)/2)]
که با آمایش ایندو میتوانیم همهیِ مَرهایی که ارستو میتوانسته داشته را برونکشیم:
کد:
>>> hamfozudhâ = [i for i in range(4, 100) if not any(is_prime(a) and is_prime(b) for a, b in poss(i))]
>>> hamfozudhâ
[11, 17, 23, 27, 29, 35, 37, 41, 47, 51, 53, 57, 59, 65, 67, 71, 77, 79, 83, 87, 89, 93, 95, 97]
اکنون در دنباله:
٤- افلاتون پس از اینکه ارستو میگوید میدانستم نمیتوانی در بیاوری, درمیابد که که دو مَر کدام هستند, ولی چگونه؟
در اینجا افلاتون از سخن ارستو درمیابد که دو مری که همفزود ارستو را میتوانند بسازند, در همهیِ چهرههایِ خود بیش از ٣ فاکتور دارند و تنها
٢٤ مَر بالا هستند که این ویژگی را دارند. پس مَری که او در دست دارد یک سامهیِ افزوده میابد:
بسشمار دو مَری که بشوند آنچه او در دست دارند + همفزود دو مَری که بشوند یکی از ٢٤ مَر بالا.
با در دست داشتن این دو افلاتون درجا دو مر را میابد.
٥- افلاتون میگوید که دو مَر را یافته, ارستو پس از آنکه درمیابد افلاتون توانسته دو مَر را بیابد, او هم آنها را پیدا میکند, ولی چگونه؟
در اینجا بایستی از دیدگاه ارستو بنگریم. ارستو یکی از ٢٤ مَر بالا را دارد و هر کُدام از این ٢٤ مَر فهرستی از بسشُمارهایِ شایند در خود دارند. ب.ن. اگر
مَر همفزود در دست ارستو ٢٣ باشد, بسشمارهای شایند خواهند بود:
کد:
23 = (2, 21) 42, (3, 20) 60, (4, 19) 76, (5, 18) 90, (6, 17) 102, (7, 16) 112, (8, 15) 120, (9, 14) 126, (10, 13) 130, (11, 12) 132,
در اینجا همهیِ فهرستهایِ این ٢٤ مَر خواهند بود:
کد:
for hamfozud in hamfozudhâ:
print(hamfozud)
for a, b in poss(hamfozud): print((a,b), a*b, end=', ')
print('\n')
11
(2, 9) 18, (3, 8) 24, (4, 7) 28, (5, 6) 30,
17
(2, 15) 30, (3, 14) 42, (4, 13) 52, (5, 12) 60, (6, 11) 66, (7, 10) 70, (8, 9) 72,
23
(2, 21) 42, (3, 20) 60, (4, 19) 76, (5, 18) 90, (6, 17) 102, (7, 16) 112, (8, 15) 120, (9, 14) 126, (10, 13) 130, (11, 12) 132,
27
(2, 25) 50, (3, 24) 72, (4, 23) 92, (5, 22) 110, (6, 21) 126, (7, 20) 140, (8, 19) 152, (9, 18) 162, (10, 17) 170, (11, 16) 176, (12, 15) 180, (13, 14) 182,
29
(2, 27) 54, (3, 26) 78, (4, 25) 100, (5, 24) 120, (6, 23) 138, (7, 22) 154, (8, 21) 168, (9, 20) 180, (10, 19) 190, (11, 18) 198, (12, 17) 204, (13, 16) 208, (14, 15) 210,
...
که فهرست بسیار ترسناکی میشود, ولی در اینجا ما افلاتون کار ارستو را نیز انجامیده, زیرا زمانیکه افلاتون میگوید دو مَر
را یافتم, بسشمارِ در دست وی بباید نمیتواند یکزمان به دو تا از ٢٤ مر فهرست همفزودها بیانجامد. برای نمونه ما داریم:
11
(2, 9) 18, (3, 8) 24, (4, 7) 28, (5, 6) 30,
17
(2, 15) 30, (3, 14) 42, (4, 13) 52, (5, 12) 60, (6, 11) 66, (7, 10) 70, (8, 9) 72,
پس اگر بسشمار نمونهوار ٣٠ میبود, افلاتون نمیتوانست هرگز درآورد که این ٣٠ از ١١ آمده یا ١٧.
تا اینجا درست, ولی چگونه ارستو پس از اینکه در میابد افلاتون دو مَر را یافته, او هم در دنبال میابد؟ در اینجا تنها و تنها یک راه فرنودین بجا میماند, فهرستِ در دست
ارستو باید بگونهای باشد که بجز یکی از مَرهایِ آن, دیگریها همتایِ دوم یا بیشتری در فهرست داشته باشند, که از آنجاییکه افلاتون هیچکدام از
آنها را نگزیده (همچون ٣٠), پس ناگزیر تنها مَر بجا مانده همانْ بسشمار در دست افلاتون باشد; که در اینجا با یک نگاه سرسری این فهرست ویژه را در بالا میبینیم:
11
(2, 9) 18, (3, 8) 24, (4, 7) 28, (5, 6) [strike]30[/strike],
17
(2, 15) [strike]30[/strike], (3, 14) [strike]42[/strike], (4, 13) 52, (5, 12) [strike]60[/strike], (6, 11) [strike]66[/strike], (7, 10) [strike]70[/strike], (8, 9) [strike]72[/strike],
23
(2, 21) [strike]42[/strike], (3, 20) 60, (4, 19) 76, (5, 18) 90, (6, 17) 102, (7, 16) 112, (8, 15) 120, (9, 14) 126, (10, 13) 130, (11, 12) 132,
27
(2, 25) 50, (3, 24) 72, (4, 23) 92, (5, 22) 110, (6, 21) 126, (7, 20) 140, (8, 19) 152, (9, 18) 162, (10, 17) 170, (11, 16) 176, (12, 15) 180, (13, 14) 182,
29
(2, 27) 54, (3, 26) 78, (4, 25) 100, (5, 24) 120, (6, 23) 138, (7, 22) 154, (8, 21) 168, (9, 20) 180, (10, 19) 190, (11, 18) 198, (12, 17) 204, (13, 16) 208, (14, 15) 210,
35
(2, 33) [strike]66[/strike], (3, 32) 96, (4, 31) 124, (5, 30) 150, (6, 29) 174, (7, 28) 196, (8, 27) 216, (9, 26) 234, (10, 25) 250, (11, 24) 264, (12, 23) 276, (13, 22) 286, (14, 21) 294, (15, 20) 300, (16, 19) 304, (17, 18) 306,
...
پارسیگر