Loading [MathJax]/jax/output/HTML-CSS/jax.js
Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
2 beğenilme 0 beğenilmeme
1.4k kez görüntülendi
Soru: Bir düzgün n-genin köşelerinden üçünü köşe kabul eden üçgenleri düşünelim. Bu üçgenlerden birbiriyle eş olanlar aynı kabul edilirse, farklı üçgenlerin sayısını veren f(n) dizisinin programını yazınız. 3n27 için dizinin ilk 25 terimini listeleyen bir çıktı üretiniz.

 

Açıklamalar:

Örnekler; n=3 iken eşkenar üçgende sadece eşkenar üçgen vardır ve f(3)=1, n=4 iken karede sadece ikizkenar dik üçgen vardır ve f(4)=1, n=5 iken düzgün beşgende {36,72,72} ve {36,36,108} üçgenleri vardır ve f(5)=2 dir.

Ben Python dilini kullanıyorum ancak bilgi çeşitliliği açısından Mathematica veya bildiğiniz başka kodlama dilleri ile çözümler de gönderebilirsiniz.
Veri Bilimi kategorisinde (2.6k puan) tarafından  | 1.4k kez görüntülendi

5 Cevaplar

2 beğenilme 0 beğenilmeme
En İyi Cevap
Kağıt kalemle uğraşırsak verilen fonksiyonun formülünü bulabiliriz.

Bir düzgün n-gende üç köşenin birleşmesiyle oluşabilecek en ufak açı 180n'dir. Bu açı da ardışık iki köşe ve üçüncü herhangi bir köşe seçilmesiyle elde edilir. Düzgün n-gende köşeler seçilerek oluşturulan üçgenlerin hepsinin dış teğet çemberi aynı olacaktır. Dolayısıyla bu seçme yöntemiyle elde edilen iki üçgenin eş olması için gerek ve yeterli şart açılarının aynı olmasıdır. Bu üçgenlerin ise herhangi bir açısı 1kn2 tamsayı olmak üzere 180nk şeklindedir çünkü aslında düzgün n-gen bir kirişler n-genidir (bu tabir ne kadar doğru bilemem ama demek istediğim anlaşıldı umarım  :D). Üçgenin açıları 180nk1, 180nk2 ve 180nk3 olsun. İç açıları toplamı 180 olduğundan k1+k2+k3=n'dir. Soru bu haliyle dağılım sorusu gibi gözükse de sıralama önemsiz olduğundan tam bir dağılım sorusu değildir.

Permütasyonda sorun çıkartan kısım ki'lerin bazılarının eşit olduğu durumlardır. k1=k2 için 2k1+k3=n denklemine bakalım. Bu denklemin n tekse n12 adet, çiftse n22 adet çözümü vardır. Eğer 3n ise bir tane k1=k2=k3 çözümü vardır, değilse yoktur. Üç değişkenin eşit olduğu çözüm sayısı a, sadece iki değişkenin eşit olduğu çözüm sayısı b, üç değişkenin de farklı olduğu çözüm sayısı c olsun. Dağılımdan k1+k2+k3=n olan sıralı üçlü sayısı (n12) bulunur. Yani a+3b+6c=(n12) olacaktır ve bizim aradığımız sayı a+b+c'dir.

Eğer n=6k ise a=1, b=n221 olacaktır. Buradan c=n26n+1212 bulunur. Dolayısıyla a+b+c=n212 bulunur.

Eğer n=6k+1 ise a=0, b=n12 ve c=n26n+512 olur. a+b+c=n2112 bulunur. Bu şekilde ilerlenirse aranan sayıya f(n) dersek f(n)={n212eğer   n0(mod6)   isen2112eğer   n1,5(mod6)   isen2412eğer   n2,4(mod6)   isen2+312eğer   n3(mod6)   ise elde edilir.
(127 puan) tarafından 
tarafından seçilmiş
Güzel çözüm, tebrikler.
1 beğenilme 0 beğenilmeme

 Cok hizli degil ama Mathematica ile soyle yapabiliriz. n=1,2,...,27 icin 30 saniye aliyor..

Ana mantik, duzdun cokgenlerin koordinatlarini biliyoruz ve CirclePoints[n] ile buluruz. n noktanin 3lu altkumelerini buluruz ve her uc noktayi birlestirerek duzgun cokgen icine cizilebilien ucgenleri buluruz. Sonra bu ucgenlerin alanlarini bulup, ayni alana sahip ucgenleri sileriz. Burasi biraz riskli, farkli ucgenler cok dusuk ihtimal olsa da ayni alani verebilir. Elimizde kalan alanlar farkli ucgenlerin sayisini verir. Sonuctan %100 emin degilim ama dogru gibi duruyor..

f[n_] := Area[#, WorkingPrecision -> 100] & /@ (Polygon[#] & /@ Subsets[CirclePoints[n], {3}]) // DeleteDuplicates // Length
TableForm[Transpose@{Range[3, 27], f /@ Range[3, 27]}, TableHeadings -> {None, {"n", "f(n)"}}]

nf(n)3141526374859710811101211131414161519162017241827193020312137224023442445255226562761

 

Table[Show[ Graphics[{RandomColor[], Opacity@0.5, Polygon[#]}] & /@ 
   Subsets[CirclePoints[n], {3}],   PlotLabel -> "n=" <> ToString@n], {n, 3, 10}]

 

f(12)=11 icin butun farkli ucgenler.

Yukarida da belirttigim gibi alandan gitmek tehlikeli. Cunku ucgenler es olmasa da ayni alana sahip olabiliyor. Ya acidan gidilecek yada kenar uzunluklari karsilastirilacak. Ben ikincisini sectim.

f[n_] := Sort /@ (Apply[EuclideanDistance, Subsets[#, {2}] & /@ Subsets[CirclePoints[n], {3}], {2}] //N[#, 100] &) // DeleteDuplicates // Length
Table[{n, f[n]}, {n, 3, 27}] // Quiet

{{3, 1}, {4, 1}, {5, 2}, {6, 3}, {7, 4}, {8, 5}, {9, 7}, {10, 8}, {11, 10}, {12, 12}, {13, 14}, {14, 16}, {15, 19}, {16, 21}, {17, 24}, {18, 27}, {19, 30}, {20, 33}, {21, 37}, {22, 40}, {23,  44}, {24, 48}, {25, 52}, {26, 56}, {27, 61}}

 

(2.9k puan) tarafından 
tarafından düzenlendi
Ökkeş hocam teşekkürler. Sizin listenizin sayıları gereğinden biraz büyük gelebiliyor bazen.

3n27 için benim listem şöyle:

[1,1,2,3,4,5,7,8,10,12,14,16,19,21,24,27,30,33,37,40,44,48,52,56,61]

Örneğin 7-gende, sayarak f(7)=4 tane üçgen buluyorum. 7α=180 olmak üzere {α,α,5α}, {α,2α,4α}, {α,3α,3α}, {2α,2α,3α} üçgenleri.
Alan hesabini numerik olarak hesaplarken yuvarlama hatasi olmus, son rakam farkli olunca alani farkli saymis ve oldugundan fazla ucgen elde etmisiz..  Duzelttim. Sizin buldugunuz sonucla bazi farkliliklar var hala. Biraz dusuneyim, belki baska bir yaklasim bulurum..
f(12)=11 olduguna %99.9 eminim :)
Güzel çizim Ökkeş hocam. 12-gen içinde {30,30,120} üçgeni de olmalıdır. Bunu da eklerseniz f(12)=12 oluyor.
Son 12 sekilden 4. ve 6. ucgenlerin alanlari ayni ama es degiller.

18(33)(1+3)=34=0.433013
Teşekkürler Ökkeş hocam. Elinize sağlık. 4 üncü ve 6 ncı üçgenlerin alan eşitliğinden faydalanarak başka bir geometri sorusu çıkarabilirim sanıyorum.
1 beğenilme 0 beğenilmeme
a(n) = round((n + 3)^2/12)

[a(i) for i in 0:45]

////////// Sonuc

46-element Vector{Float64}:
   1.0
   1.0
   2.0
   3.0
   4.0
   5.0
   7.0
   8.0
  10.0
  12.0
  14.0
  16.0
  19.0
  21.0
  24.0
  27.0
  30.0
  33.0
  37.0
  40.0
  44.0
  48.0
  52.0
  56.0
  61.0
  65.0
  70.0
  75.0
  80.0
  85.0
  91.0
  96.0
 102.0
 108.0
 114.0
 120.0
 127.0
 133.0
 140.0
 147.0
 154.0
 161.0
 169.0
 176.0
 184.0
 192.0

Nasil oldu bu boyle ? 

(1.6k puan) tarafından 
Benim elde ettiğim liste ile sizinkini karşılaştırdım. İlk 200 terimde aynı değerler üretiliyor, ilginç. Takip edenler için, yazdığınız kodun matematiksel ifadesini verebiliriz: x gerçel sayısına en yakın tam sayıyı veren (tam sayıya yuvarlayan) fonksiyon r(x) olmak üzere a(n)=r(n212)=f(n) olmaktadır.

(r(0,5)=1 olarak yuvarlanır ve koddaki round fonksiyonuna karşılık gelir.)

 

a(n) fonksiyonunuz neden doğru çalışıyor, şu anda benim de pek fikrim yok.
1 beğenilme 0 beğenilmeme

Problem a+b+c=n denkleminin pozitif tam sayılarda abc koşulu altındaki çözüm sayısının bulunmasıdır. Bu değere, n nin 3parçalanış sayısı denir. Bu sınırlamalarla, a sayısı n/3 ü aşamaz, b sayısı da n/2'yi aşamaz. Problemi biraz daha açıklayalım:

 Küçük sayılarda çözümler kolayca sayılabiliyor. Örneğin n=8 için: 8=1+1+6=1+2+5=1+3+4=2+2+4=2+3+3 olup f(8)=5 tir. Bizim problemimizde düzgün 8-gende 5 tane farklı üçgen oluşur demektir.

Buna göre aşağıdaki Python kod parçacığını yazabiliriz:

def f(n):
    sum = 0
    for a in range(1, n//3 + 1):
        for b in range(1, n//2 + 1):
            for c in range(1, n-1):
                if a <= b <=c and a+b+c==n:
                    sum += 1
    return sum

liste1 = []
for i in range(3, 27):
    liste1.append(f(i))
print(liste1)

 

Bu durumda liste1 isimli liste bize n=3 dahil ve n=28 hariç, istenen aralıktaki parçalanış sayılarını sunuyor ve 

[1,1,2,3,4,5,7,8,10,12,14,16,19,21,24,27,30,33,37,40,44,48,52,56,61]

çıktısını elde ediyoruz.

(2.6k puan) tarafından 

Mathematica'nin bunun icin IntegerPartitions[] fonksiyonu var. n=3,4,...,500 icin hesap 1 saniye falan suruyor.

 

Table[{n, Length@IntegerPartitions[n, {3}]}, {n, 3, 500}]

{3,1}{4,1}{5,2}{6,3}{7,4}{8,5}{9,7}{10,8}{11,10}{12,12}{13,14}{14,16}{15,19}{16,21}{17,24}{18,27}{19,30}{20,33}{21,37}{22,40}{23,44}{24,48}{25,52}{26,56}{27,61}{28,65}{29,70}{30,75}{31,80}{32,85}{33,91}{34,96}{35,102}{36,108}{37,114}{38,120}{39,127}{40,133}{41,140}{42,147}{43,154}{44,161}{45,169}{46,176}{47,184}{48,192}{49,200}{50,208}{51,217}{52,225}{53,234}{54,243}{55,252}{56,261}{57,271}{58,280}{59,290}{60,300}{61,310}{62,320}{63,331}{64,341}{65,352}{66,363}{67,374}{68,385}{69,397}{70,408}{71,420}{72,432}{73,444}{74,456}{75,469}{76,481}{77,494}{78,507}{79,520}{80,533}{81,547}{82,560}{83,574}{84,588}{85,602}{86,616}{87,631}{88,645}{89,660}{90,675}{91,690}{92,705}{93,721}{94,736}{95,752}{96,768}{97,784}{98,800}{99,817}{100,833}{101,850}{102,867}{103,884}{104,901}{105,919}{106,936}{107,954}{108,972}{109,990}{110,1008}{111,1027}{112,1045}{113,1064}{114,1083}{115,1102}{116,1121}{117,1141}{118,1160}{119,1180}{120,1200}{121,1220}{122,1240}{123,1261}{124,1281}{125,1302}{126,1323}{127,1344}{128,1365}{129,1387}{130,1408}{131,1430}{132,1452}{133,1474}{134,1496}{135,1519}{136,1541}{137,1564}{138,1587}{139,1610}{140,1633}{141,1657}{142,1680}{143,1704}{144,1728}{145,1752}{146,1776}{147,1801}{148,1825}{149,1850}{150,1875}{151,1900}{152,1925}{153,1951}{154,1976}{155,2002}{156,2028}{157,2054}{158,2080}{159,2107}{160,2133}{161,2160}{162,2187}{163,2214}{164,2241}{165,2269}{166,2296}{167,2324}{168,2352}{169,2380}{170,2408}{171,2437}{172,2465}{173,2494}{174,2523}{175,2552}{176,2581}{177,2611}{178,2640}{179,2670}{180,2700}{181,2730}{182,2760}{183,2791}{184,2821}{185,2852}{186,2883}{187,2914}{188,2945}{189,2977}{190,3008}{191,3040}{192,3072}{193,3104}{194,3136}{195,3169}{196,3201}{197,3234}{198,3267}{199,3300}{200,3333}{201,3367}{202,3400}{203,3434}{204,3468}{205,3502}{206,3536}{207,3571}{208,3605}{209,3640}{210,3675}{211,3710}{212,3745}{213,3781}{214,3816}{215,3852}{216,3888}{217,3924}{218,3960}{219,3997}{220,4033}{221,4070}{222,4107}{223,4144}{224,4181}{225,4219}{226,4256}{227,4294}{228,4332}{229,4370}{230,4408}{231,4447}{232,4485}{233,4524}{234,4563}{235,4602}{236,4641}{237,4681}{238,4720}{239,4760}{240,4800}{241,4840}{242,4880}{243,4921}{244,4961}{245,5002}{246,5043}{247,5084}{248,5125}{249,5167}{250,5208}{251,5250}{252,5292}{253,5334}{254,5376}{255,5419}{256,5461}{257,5504}{258,5547}{259,5590}{260,5633}{261,5677}{262,5720}{263,5764}{264,5808}{265,5852}{266,5896}{267,5941}{268,5985}{269,6030}{270,6075}{271,6120}{272,6165}{273,6211}{274,6256}{275,6302}{276,6348}{277,6394}{278,6440}{279,6487}{280,6533}{281,6580}{282,6627}{283,6674}{284,6721}{285,6769}{286,6816}{287,6864}{288,6912}{289,6960}{290,7008}{291,7057}{292,7105}{293,7154}{294,7203}{295,7252}{296,7301}{297,7351}{298,7400}{299,7450}{300,7500}{301,7550}{302,7600}{303,7651}{304,7701}{305,7752}{306,7803}{307,7854}{308,7905}{309,7957}{310,8008}{311,8060}{312,8112}{313,8164}{314,8216}{315,8269}{316,8321}{317,8374}{318,8427}{319,8480}{320,8533}{321,8587}{322,8640}{323,8694}{324,8748}{325,8802}{326,8856}{327,8911}{328,8965}{329,9020}{330,9075}{331,9130}{332,9185}{333,9241}{334,9296}{335,9352}{336,9408}{337,9464}{338,9520}{339,9577}{340,9633}{341,9690}{342,9747}{343,9804}{344,9861}{345,9919}{346,9976}{347,10034}{348,10092}{349,10150}{350,10208}{351,10267}{352,10325}{353,10384}{354,10443}{355,10502}{356,10561}{357,10621}{358,10680}{359,10740}{360,10800}{361,10860}{362,10920}{363,10981}{364,11041}{365,11102}{366,11163}{367,11224}{368,11285}{369,11347}{370,11408}{371,11470}{372,11532}{373,11594}{374,11656}{375,11719}{376,11781}{377,11844}{378,11907}{379,11970}{380,12033}{381,12097}{382,12160}{383,12224}{384,12288}{385,12352}{386,12416}{387,12481}{388,12545}{389,12610}{390,12675}{391,12740}{392,12805}{393,12871}{394,12936}{395,13002}{396,13068}{397,13134}{398,13200}{399,13267}{400,13333}{401,13400}{402,13467}{403,13534}{404,13601}{405,13669}{406,13736}{407,13804}{408,13872}{409,13940}{410,14008}{411,14077}{412,14145}{413,14214}{414,14283}{415,14352}{416,14421}{417,14491}{418,14560}{419,14630}{420,14700}{421,14770}{422,14840}{423,14911}{424,14981}{425,15052}{426,15123}{427,15194}{428,15265}{429,15337}{430,15408}{431,15480}{432,15552}{433,15624}{434,15696}{435,15769}{436,15841}{437,15914}{438,15987}{439,16060}{440,16133}{441,16207}{442,16280}{443,16354}{444,16428}{445,16502}{446,16576}{447,16651}{448,16725}{449,16800}{450,16875}{451,16950}{452,17025}{453,17101}{454,17176}{455,17252}{456,17328}{457,17404}{458,17480}{459,17557}{460,17633}{461,17710}{462,17787}{463,17864}{464,17941}{465,18019}{466,18096}{467,18174}{468,18252}{469,18330}{470,18408}{471,18487}{472,18565}{473,18644}{474,18723}{475,18802}{476,18881}{477,18961}{478,19040}{479,19120}{480,19200}{481,19280}{482,19360}{483,19441}{484,19521}{485,19602}{486,19683}{487,19764}{488,19845}{489,19927}{490,20008}{491,20090}{492,20172}{493,20254}{494,20336}{495,20419}{496,20501}{497,20584}{498,20667}{499,20750}{500,20833}

.........................
1 beğenilme 0 beğenilmeme

Haskell calisiyordum bir de haskell cevabi yazayim dedim. 

Lokman Gokce, asagida Integer partitionlarindan bahsetmis. Bunu haskell de kodladim

p k n 
  | k == 0 && n == 0   = 1
  | k <= 0 || n <= 0   = 0
  | otherwise          = p k (n-k) + p (k - 1) (n - 1)

aradigimizDizi = p 3 <$> [3 ..]

take 100 aradigimizDizi

/// Sonuc 
[1,1,2,3,4,5,7,8,10,12,14,16,19,21,24,27,30,33,37,40,44,48,52,56,61,65,70,75,80,85,91,96,102,108,114,120,127,133,140,147,154,161,169,176,184,192,200,208,217,225,234,243,252,261,271,280,290,300,310,320,331,341,352,363,374,385,397,408,420,432,444,456,469,481,494,507,520,533,547,560,574,588,602,616,631,645,660,675,690,705,721,736,752,768,784,800,817,833,850,867]

 

(1.6k puan) tarafından 
20,312 soru
21,868 cevap
73,589 yorum
2,855,089 kullanıcı