TENTAMEN HF1002, 6H3120, 6H3117 Diskret Matematik Skrivtid 8:15-13:15 Måndag 8 juni 2009 Tentamen består av 4 sidor Hjälpmedel Den kurslitteratur som använts under kursen, samt egna anteckningar, programlistningar och böcker. Dock inga egna disketter eller CD-ROM. Tentamen består av 12 uppgifter. I katalogen W:\PROV\DM finns Kursbunten (pdf), Lathund i Maple (pdf) samt någon/några filer du kan komma att behöva för att lösa någon/några av uppgifterna. För varje uppgift med korrekt svar får du 1 poäng. 5 poäng av maximalt 12 räcker säkert till godkänt. Resultatet 4 poäng berättigar till komplettering. Du redovisar normalt bara svaret, ett tal eller en lista med tal. Det betyder att ett litet slarvfel leder till 0 poäng. För någon uppgift kan krävas något längre text som svar. I så fall anges detta. Betygsskala A B C D E 12-11 10 9 8-7 6-5 Håkan Strömberg 1 KTH STH
Uppgift 1 Uttrycket (1+2+3+...+n) 2 (1 2 +2 2 +3 2 +...+n 2 ) kan skrivas som f(n) = a n 4 +b n 3 +c n 2 +d n Bestäm koefficienterna a, b, c, d. Svar: Expand[Simplify[(Sum[i, {i, n})^2 - Sum[i^2, {i, n} Svar: f(x) = 1 4 n4 + 1 6 n3 1 4 n2 1 4 n Uppgift 2 I det södra regionen sålde man förra året den nya SAAB-modellen för ett totalt värde av 77983739 kr och i den norra regionen för 53712143 kr. Vad kostar en bil om vi vet att exakt samma pris, ett heltal > 1 kr, tillämpades i båda regionerna under hela året? Svar: En bil kostade 224737 kr FactorInteger[53712143 FactorInteger[77983739 {{239,1},{224737,1}} {{347,1},{224737,1}} Håkan Strömberg 2 KTH STH
Uppgift 3 En blandning av talen 1...n är en permutation sådan att inget tal hamnar på ett platsnummer som är lika med talet. [3,4,2,1 är en bladning av talen 1...4, vilket inte [2,4,3,1 (3 finns på plats 3) eller [4,2,3,1 år (2 och 3 finns på plats 2 respektive 3). Ta reda på hur många blandningar det finns för n = 4...7. Svara med en tabell. Svar: f[n_ := Block[{L = Range[n, S, i, antal = 0, j, ok}, S = Permutations[L; For[k = 1, k <= Length[S, k++, i = S[[k; ok = True; For[j = 1, j <= n, j++, If[i[[j == j, ok = False; Break[; ; If[ok, antal++; ; antal Table[{i, f[i}, {i, 4, 7} g[n_ := n! Sum[(-1)^i/i!, {i, 0, n} Table[{i, g[i}, {i, 4, 7} Två funktioner med samma uppgift. Vi får 4 5 6 7 9 44 265 1854 Håkan Strömberg 3 KTH STH
Uppgift 4 Figur 1: 7 jobbsökande 1...7 söker lika många lediga jobb A...G. Bågarna visar vilka jobb de sökande är kvalificerade för. Finns det möjlighet att tillsätta jobben så att alla blir anställda? I så fall vilka jobb kommer de sökande att få? Hjälp: Kanske BipartiteMatching e={{1,8},{1,10},{2,8},{2,11},{3,8},{4,10},{4,13},{5,8}, {5,9},{6,9},{6,11},{6,12},{6,13},{7,12},{7,13},{7,14}}; g = FromOrderedPairs[e, Type -> Undirected BipartiteMatching[g {{1,10},{2,11},{3,8},{4,13},{5,9},{6,12},{7,14}} Samma sak som 1 C,2 D,3 A,4 F,5 B,6 E,7 G Alla 7 jobbsökande kan tilldelas ett jobb. Det finns bara en lösning. Man klarar sig förresten utan programvara. Om alla ska ha jobb måste 3 A. leder till 1 C och då 4 F. 5 B och 7 G. 2 D och därmed 6 E. Håkan Strömberg 4 KTH STH
Uppgift 5 För talet n = 109 är n 2 = 11881 och för m = 173 är m 2 = 29929. n och m är tal sådana att n 2 och m 2 endast innehåller två olika siffror. Det finns antagligen oändligt många tal med denna egenskap, men vilket är det största heltalet x < 5000 med egenskapen att x 2 endast innehåller två olika siffror? Svar: f[ := Block[{tal, svar = {}}, For[tal = 1, tal < 5000, tal++, n = Length[Union[IntegerDigits[tal^2; If[n == 2, AppendTo[svar, {tal, tal^2} ; svar Ur listan vi får från f[ plockar vi x = 3114 som ger x 2 = 9696996 Håkan Strömberg 5 KTH STH
Uppgift 6 Tre tal x 1,x 2 och x 3 bildar en aritmetisk talföljd, det vill säga skillnaden mellan två på varandra följande tal, x n+1 x n, är konstant. Tre andra tal y 1,y 2 och y 3 bildar en geometrisk talföljd, det vill säga kvoten mellan två på varandra följande tal, y n+1 y n, är konstant. Om man adderar motsvarande tal, (x 1 med y 1, x 2 med y 2, x 3 med y 3 ) i det två följderna får man summorna 85,76 respektive 84. Adderar man de tre termerna i den aritmetiska talföljden får man summan 126. Bestäm de sex talen i de två följderna. Solve[{x+y==85, x+d+k*y==76, x+2*d+k^2*y==84, x+x+d+x+2*d==126} som ger två lösningar: och d = 26,k = 2,x = 68,y = 17 d = 25,k = 1,x = 17,y = 68 2 Den första lösningen ger x 1 = 68,x 2 = 42,x 3 = 16,y 1 = 17,y 2 = 34,y 3 = 68 Den andra x 1 = 17,x 2 = 42,x 3 = 67,y 1 = 68,y 2 = 34,y 3 = 17 Håkan Strömberg 6 KTH STH
Uppgift 7 Erdös-Straus förmodan (olöst problem sedan 1948), att det för alla n > 2, finns positiva heltal x,y och z sådana att 4 n = 1 x + 1 y + 1 z Till exempel då n = 13 4 13 = 1 4 + 1 18 + 1 468 Visa att påståendet också är sant för n = 2009, där dessutom x,y,z alla är olika. 1 int main(void){ 2 long long z1,z2,z; 3 int x,y,antal=0; 4 for(x=1;x<5000;x++) 5 for(y=x+1;y<5000;y++){ 6 z1=(long long)2009 x y; 7 z2=(long long)4 x y 2009 y 2009 x; 8 if (z2>0 && z1%z2==0){ 9 z=z1/z2; 10 if(z>0 && z<5000) 11 printf("%4d:(%4d,%4d,%4d)\n",++antal,x,y,(int)z); 12 } 13 } 14 } Det finns åtminstone 86 tripplar där alla tal är < 5000. Till exempel 4 2009 = 1 931 + 1 3444 + 1 1596 Håkan Strömberg 7 KTH STH
Uppgift 8 Finn de två värden n kan ha, då de positiva heltalen x < y < z < 100 alla är delare till n 1 och då x+y+z = n Svar: f[ := Block[{x, y, z, n, S = {}}, For[x = 1, x < 98, x++, For[y = x + 1, y < 99, y++, For[z = y + 1, z < 100, z++, n = x + y + z; If[Mod[n-1,x==0 && Mod[n-1,y==0 && Mod[n-1,z==0, AppendTo[S, n ; S De två talen är 13 och 31 Håkan Strömberg 8 KTH STH
Uppgift 9 Talet 23339 är ett primtal, detta gäller även om vi tar bort sista siffran och får 2333. Vi tar bort sista siffran igen och får ett nytt primtal 233. Även 23 och 2 är primtal. Sök det största primtal n som fortsätter att vara primtal allt igen, då vi tar bort sista siffran. Svar: f[tal_ := Block[{i}, If[PrimeQ[tal, If[tal > mprime, mprime = tal; For[i = 0, i <= 9, i++, f[10 tal + i; mprime = 0; Table[f[i, {i, 1, 9}; mprime Det sökta primtalet är 73939133 Håkan Strömberg 9 KTH STH
Uppgift 10 a,b,c är tre positiva heltal, alla 200, sådana att Dessutom är lcm(a,b) lcm(a,c) lcm(b,c) = a b c gcd(a,b,c) Bestäm minimum för a+b+c Svar: a b, a c, b a, b c, c a, c b f[ := Block[{m, a, b, c,}, m = 10000000; For[a = 1, a <= 200, a++, For[b = a, b <= 200, b++, For[c = b, c <= 200, c++, f1 = True; f2 = True; If[Mod[a,b==0 Mod[a,c==0 Mod[b,a==0 Mod[b,c==0 Mod[c,a==0 Mod[c,b==0, f1 = False ; If[LCM[a,b LCM[a,c LCM[b,c!= a b c GCD[a,b,c, f2 = False; s = a + b + c; If[f1 && f2 && s < m, m = s; resultat = {a, b, c, m}; ; resultat Svar: 60,90,150 ger minsta summan 300. Håkan Strömberg 10 KTH STH
Uppgift 11 Figur 2: I figur 2 ser vi 15 städer och de vägar som förbinder dem, tillsammans med gällande längd. Mellan två städer, vilka som helst, finns normalt flera möjliga rutter. Någon av dessa rutter är kortast (kan i och för sig finnas flera som är lika korta). Studerar man alla par av städer och jämför den kortaste rutten så finns det förstås en som är längre än de andra. Ta reda på vilka städer 1... 15 som har det längsta kortaste avståndet. Data finns på textfilen graf.txt för cut and paste. e={{1,2},{1,9},{1,15},{2,15},{3,4},{3,15},{4,5},{4,6}, {4,7},{4,8},{5,6},{6,14},{7,9},{7,13},{8,9},{8,15}, {9,10},{9,11},{9,13},{10,11},{11,12},{12,13},{12,14},{13,14}}; v={13,12,7,7,8,16,11,16,8,12,10,8,14,11,9,7,7,14,8,10,9,9,11,11}; g=fromorderedpairs[e, Type -> Undirected g=setedgeweights[g, v Diameter[g m=allpairsshortestpath[g; max=max[m 43 Position[m, max {{3,11}, {11,3}} Det längsta kortaste avståndet är mellan nod 3 och 11 med avståndet 43. Håkan Strömberg 11 KTH STH
Uppgift 12 Figur 3: Adam befinner sig vid bassängkanten (B). Tar han ett steg framåt hamnar han i vattnet (A). Tar han ett steg bakåt hamnar han i första gröna rutan (C). Adam har en urna med n röda och n svarta bollar. Han drar en boll i taget ur urnan. Är den svart tar ha ett steg framåt, är den röd tar han ett steg bakåt. Bestäm sannolikheten att han hamnar i vattnet innan han dragit samtliga bollar ur urnan för n = 1...5. Svara med en tabell med simulerade data eller bestäm sannolikheten som en formel som beror av n. f[n_ := Block[{L = {}, S, i, j, antal = 0, sum}, L = Flatten[Table[{1, -1}, {i, 1, n}; S = Permutations[L; For[k = 1, k <= Length[S, k++, i = S[[k; sum = 0; For[j = 1, j <= 2 n, j++, sum = sum + i[[j; If[sum < 0, antal++; Break[; ; {n, antal/length[s} Table[f[i, {i, 1, 5} Sannolikheterna för n = 1 p = 1 2, n = 2 p = 2 3, n = 3 p = 3 4, n = 4 p = 4 5, n = 5 p = 5. Den eftersökta formeln 6 p = n n+1 Håkan Strömberg 12 KTH STH