Maple is a big fat calculator 23*47; NiMiJSIzIg== C:=combinat[numbcomb]; NiM+SSJDRzYiSSludW1iY29tYkc2JEkqcHJvdGVjdGVkR0YoL0krbW9kdWxlbmFtZUdGJUkpY29tYmluYXRHNiRGKEkoX3N5c2xpYkdGJQ== C(43,7); NiMiKTlUQUs= 43!/7!/(43-7)!; NiMiKTlUQUs= 2^11213-1; NiMiW154Ij4jUidwKDN3OVJuaXoleSpvVDBvJCk9KFw5Q1U1eS0uRlYxISlcJVJeJEdOQmdSQ2cnZUYmPW5lbyZ5XHM/LjlwYyhvInpyVj1kYmNJWV5fWiZwKVI7ISk9biI9KHpXWEkpZmpkcktwTyczT0dDT05yVVRhc1pNUDJpZD13UlpaKjQuaiM0Sl14bmE1eCxPPklZOScpRydRPWdAWydcXlJBeFwwVl9eNC4kUXhIKkc9aj9jVUleLypmcTtoIlJDSTAyOz9BPCVcdXIwejA4NmlFXnh2MmUqKSoqKnl2MD9QNFJPNXFaKVsqPmFPa3Q/JFxAYnhtO10tLyZwXXQ2NFhnQXF3X1ByIilHcEJmPiRIc2owP0JOLic+ZXVbZEdKP1d2I1FuJyplU0Z1KFJQak1Zc0JMQCtcJDQlUTZgUU9qSi8uQEVlcEkvYm9TS3Qpb3V0LHN4JFsmNC9UO1orWU4xMTovPXl5R1tsR288eSJILXoqZWdgZik+PEEielAlXEcpKVJAQnRxcDZ4MWFQTUU7JjNNQSp6PydlJDNLJykqKlF4dlkleVRnTyV5L2FASUpjKD4vIjRTTEBUMyRIeT1cIUg6KDNlIipRVHY9LT54IVtMMVVkRiI+KjRqIm9uUldCYmpBcixLKUhINWV2VE1ndS8ud3NFVD5vKGYlPVZEQSM0YitqaSdHTidIPTE9eHdhTV1UXGpGNGpxMGImeUEjKTMpZU0nW0JiZykpKmUsR245Q20xT3hEZm0pNFRBIlxwZGdMKClRd1hvN3NoR1NGKDM/LyN5eVZVJD01dydILTp6bVJNTm9WRzRCM05zI3kjZjpXeEB6UydvUGFsK3MjemN4QiQpUSJceEZiYyV6Zj8raT4qUk0vPCdSLitHNUdwYzF2cTRoa0EoPSdHRXg/TVFvMDNSLC41Vj53YHlaQlRPYVVvWSZcKjMoXEIkek9wYUM3ZFdEVSxcO1V5LWYsdmdiIj1WOCt0JT54LisydGI/bWdociJlaFooPnAiUVYpKSozZmBaOjZLeTRjU2dgTmNzTi5pSC5qemgzYWlGTDEjKWVGQjRVdDZfZSI0XWxkXnAlZjdVIyo+SyZIJFw0cFVeWldKT3dvMSY0VCdRS0YlZWtnNWFEZl1qXFgpUUZfWzkwTDo7MVp1VG1ER3A6a3dlX2szaCplJVJ1MS5eKXl4KiplPWw9JXkiSDJTLWQnKXkoPSMpPTdgKCk+Z10qeWU/NmwkbyFSSUZHeC1NLFY+XmQ+MCEqKSp5QDguJUhdNmBbRC4wPj47JnlaRm9PX2UqKWZXczQjNDBfXURPQEdVMDArNyEpW3lKejwsRG9ARF1tPis7UF1obmR5J1JSLkMnPlokKip5WyEpWyRwalVWR0IoR2RPdVw2YU0xcT1BdTciUSNHLkAmeilbKnpoJz5DIlI+U144TSkqeUhGWDN5SyVSJEhYJDM2M1sqW2FQeGVwUyopUSpIekg7ZEtbSFNIUVxocTYjUlVEKVtleVAlR2paMldmIioqW1oxSjRReUQlPmgzITRWIWVKajE5azw8KCpSI0coPTpJRFkmNERbRyR6U3E1Jio9JjRDR2A+MV9iJDRSPycpPVlnL1pfbmU5MzVJTyY0Py1qYU5EUCFlWzl1QkAoejBNPEFoRTB3J1F2VzM6UyQ9TDh5Qyd5OT92NkJFMCMqR25kc2N6S1g9RVlxd3ooXCp5TkpjZSJRUy0tZGwnWyoqKSkzJFIxI2VEYjpaPVEub0skSEp3PyVIXGlBUjgzSyM0ajJVK2tlKyp6dCM+Typ6MlYrJ1JVZ2IvY0FSY2pLOVIxJT43RGRrJFEjW0spZlIvXF5NajxYNyFvLWdMJGYkPXh4NTQ7JSpwKFJsRyh5amptSE5qI3AncCJHRlBoRlFKOmx3Ym86dVBnYGQ8NFBtXy9ydV5ScjtcbGMiKSlvJEgqb09oczU/JCpHREBSOllSUiR5aUBUVE1MMmFVJFtcXUFcbjInKik0SmN6WSpHd0hAMyN5NXYiWyJ6OCxGWHQsPHZhayVvIz42T0F0X3RwaCdwcj9eZG0kUUQnXEItOWJPXSVRIXAoUi8nNCYzNi9oLmRDVillbkojKkgvSi09ZEo0LWFsQkt1IUdgeXlGeEgseU0qXCl5M24rbHpwP2dQTXhhNkBVdmJYJVIlPTR4JzRwNGdzUiQ0InlaJlIlW0w7MjRULHldRiNIZy9OaVEjKWZsZVVbUFheaU1WJj00aidSPW1vQU1ceFUtZnIwJDNPbHAwdDNZMm0lPnA1NjJFZWIhb0RWaUBvVHYzMGAhKT0oXExZbnFxdWMkPSV5a3FlZGNydkRkPVI5JTQoWzBSKnksPSkpPWssWENNUDoyTiYzJCp5KT51cURMY3UlNDoyIlFKd0Fvd15eWCRcJD5DKnl5K08sI1FpJz09PiVlVWUoSDokUkxKUChwOD82OUc= evalf(log(%)/log(10)); NiMkIitVJFxhUCQhIic= isprime(%%); NiNJJXRydWVHSSpwcm90ZWN0ZWRHRiQ= 16! mod 17; NiMiIzs= 18! mod 19; NiMiIz0= 22! mod 23; NiMiI0E= 22!; NiMiNysrbzJ3eEYyK0M2 % mod 23; NiMiI0E= (p-1)! == p-1 mod p; Error, `=` unexpected
The following command creates a sequence of integers 1...100 and selects the ones that are prime primes100:=select(isprime,[seq(i,i=1..100)]); NiM+SSpwcmltZXMxMDBHNiI3OyIiIyIiJCIiJiIiKCIjNiIjOCIjPCIjPiIjQiIjSCIjSiIjUCIjVCIjViIjWiIjYCIjZiIjaCIjbiIjciIjdCIjeiIjJCkiIyopIiMoKg== Verify for all primes less than 100 that (p-1)! == p-1 mod p This verifies Wilson's theorem for the primes less than 100 for p in primes100 do
print(p, (p-1)! mod p);
end do; NiQiIiMiIiI= NiQiIiQiIiM= NiQiIiYiIiU= NiQiIigiIic= NiQiIzYiIzU= NiQiIzgiIzc= NiQiIzwiIzs= NiQiIz4iIz0= NiQiI0IiI0E= NiQiI0giI0c= NiQiI0oiI0k= NiQiI1AiI08= NiQiI1QiI1M= NiQiI1YiI1U= NiQiI1oiI1k= NiQiI2AiI18= NiQiI2YiI2U= NiQiI2giI2c= NiQiI24iI20= NiQiI3IiI3E= NiQiI3QiI3M= NiQiI3oiI3k= NiQiIyQpIiMjKQ== NiQiIyopIiMpKQ== NiQiIygqIiMnKg== with(numtheory); Warning, the protected name order has been redefined and unprotected
NiM3UUkmR0lnY2RHNiJJKWJpZ29tZWdhR0YlSSZjZnJhY0dGJUkpY2ZyYWNwb2xHRiVJK2N5Y2xvdG9taWNHRiVJKWRpdmlzb3JzR0YlSSlmYWN0b3JFUUdGJUkqZmFjdG9yc2V0R0YlSSdmZXJtYXRHRiVJKWltYWd1bml0R0YlSSZpbmRleEc2JEkqcHJvdGVjdGVkR0YxSShfc3lzbGliR0YlSS9pbnRlZ3JhbF9iYXNpc0dGJUkpaW52Y2ZyYWNHRiVJJ2ludnBoaUdGJUkqaXNzcXJmcmVlR0YlSSdqYWNvYmlHRiVJKmtyb25lY2tlckdGJUknbGFtYmRhR0YlSSlsZWdlbmRyZUdGJUkpbWNvbWJpbmVHRiVJKW1lcnNlbm5lR0YlSShtaWdjZGV4R0YlSSptaW5rb3dza2lHRiVJKG1pcG9seXNHRiVJJW1sb2dHRiVJJ21vYml1c0dGJUkmbXJvb3RHRiVJJm1zcXJ0R0YlSSluZWFyZXN0cEdGJUkqbnRoY29udmVyR0YlSSludGhkZW5vbUdGJUkpbnRobnVtZXJHRiVJJ250aHBvd0dGJUkmb3JkZXJHRjFJKXBkZXhwYW5kR0YlSSRwaGlHRiVJI3BpR0YlSSpwcHJpbXJvb3RHRiVJKXByaW1yb290R0YlSShxdWFkcmVzR0YlSStyb290c3VuaXR5R0YlSSpzYWZlcHJpbWVHRiVJJnNpZ21hR0YlSSpzcTJmYWN0b3JHRiVJKHN1bTJzcXJHRiVJJHRhdUdGJUkldGh1ZUdGJQ== phi; NiNJJHBoaUc2JEkqcHJvdGVjdGVkR0YlL0krbW9kdWxlbmFtZUc2IkkqbnVtdGhlb3J5RzYkRiVJKF9zeXNsaWJHRig= for i from 1 to 22 do
print(i, phi(i));
od; NiQiIiJGIw== NiQiIiMiIiI= NiQiIiQiIiM= NiQiIiUiIiM= NiQiIiYiIiU= NiQiIiciIiM= NiQiIigiIic= NiQiIikiIiU= NiQiIioiIic= NiQiIzUiIiU= NiQiIzYiIzU= NiQiIzciIiU= NiQiIzgiIzc= NiQiIzkiIic= NiQiIzoiIik= NiQiIzsiIik= NiQiIzwiIzs= NiQiIz0iIic= NiQiIz4iIz0= NiQiIz8iIik= NiQiI0AiIzc= NiQiI0EiIzU= primes100; NiM3OyIiIyIiJCIiJiIiKCIjNiIjOCIjPCIjPiIjQiIjSCIjSiIjUCIjVCIjViIjWiIjYCIjZiIjaCIjbiIjciIjdCIjeiIjJCkiIyopIiMoKg== Recall in class we discovered: phi(p) = p-1 phi(2^k) = 2^(k-1) phi(2p) = p-1 (we think because there was a step in the proof where I said "clearly" and it wasn't) for p in primes100 do
printf("[%d, %d] ",p, phi(p));
od; [2, 1] [3, 2] [5, 4] [7, 6] [11, 10] [13, 12] [17, 16] [19, 18] [23, 22] [29, 28] [31, 30] [37, 36] [41, 40] [43, 42] [47, 46] [53, 52] [59, 58] [61, 60] [67, 66] [71, 70] [73, 72] [79, 78] [83, 82] [89, 88] [97, 96] for k from 1 to 10 do
printf("[%d, %d] ",k,phi(2^k));
od; [1, 1] [2, 2] [3, 4] [4, 8] [5, 16] [6, 32] [7, 64] [8, 128] [9, 256] [10, 512] 2^9; NiMiJDcm The following 'verifies' the conjecture that phi(2*p) = p-1 if the last two numbers in each bracket are all the same (note that they are) for p in primes100 do
printf("[2*%d, %d, %d]",p,phi(2*p),p-1);
od; [2*2, 2, 1][2*3, 2, 2][2*5, 4, 4][2*7, 6, 6][2*11, 10, 10][2*13, 12, 12][2*17, 16, 16][2*19, 18, 18][2*23, 22, 22][2*29, 28, 28][2*31, 30, 30][2*37, 36, 36][2*41, 40, 40][2*43, 42, 42][2*47, 46, 46][2*53, 52, 52][2*59, 58, 58][2*61, 60, 60][2*67, 66, 66][2*71, 70, 70][2*73, 72, 72][2*79, 78, 78][2*83, 82, 82][2*89, 88, 88][2*97, 96, 96] The following statement calculates phi(p^3) for all primes p<100 for p in primes100 do
printf("[phi(%d^3) = %d = %d] ",p, phi(p^3),p^3-p^2);
od; [phi(2^3) = 4 = 4] [phi(3^3) = 18 = 18] [phi(5^3) = 100 = 100] [phi(7^3) = 294 = 294] [phi(11^3) = 1210 = 1210] [phi(13^3) = 2028 = 2028] [phi(17^3) = 4624 = 4624] [phi(19^3) = 6498 = 6498] [phi(23^3) = 11638 = 11638] [phi(29^3) = 23548 = 23548] [phi(31^3) = 28830 = 28830] [phi(37^3) = 49284 = 49284] [phi(41^3) = 67240 = 67240] [phi(43^3) = 77658 = 77658] [phi(47^3) = 101614 = 101614] [phi(53^3) = 146068 = 146068] [phi(59^3) = 201898 = 201898] [phi(61^3) = 223260 = 223260] [phi(67^3) = 296274 = 296274] [phi(71^3) = 352870 = 352870] [phi(73^3) = 383688 = 383688] [phi(79^3) = 486798 = 486798] [phi(83^3) = 564898 = 564898] [phi(89^3) = 697048 = 697048] [phi(97^3) = 903264 = 903264] observations: they all have a factor of 2 guess #1 = p^k-p^(k-1) flag:=true;
for k from 2 to 20 do
for p in primes100 do
if phi(p^k) <> p^k-p^(k-1) then
print("Dave is wrong!!!");
flag:=false;
fi;
od;
od;
if flag=true then print("DAVE is right!!!"); fi; NiM+SSVmbGFnRzYiSSV0cnVlR0kqcHJvdGVjdGVkR0Yn NiNRMURBVkV+aXN+cmlnaHQhISE2Ig== Conjecture: phi(p^k) = p^k-p^(k-1) = p^(k-1)(p-1) primes20:=select(isprime,[seq(i,i=1..20)]); NiM+SSlwcmltZXMyMEc2IjcqIiIjIiIkIiImIiIoIiM2IiM4IiM8IiM+ for p in primes20 do
for q in primes20 do
if p<>q then printf("phi(%d*%d) = %d = %d\n",p,q,phi(p*q),p*q-p-q+1); fi;
od;
od; phi(2*3) = 2 = 2
phi(2*5) = 4 = 4
phi(2*7) = 6 = 6
phi(2*11) = 10 = 10
phi(2*13) = 12 = 12
phi(2*17) = 16 = 16
phi(2*19) = 18 = 18
phi(3*2) = 2 = 2
phi(3*5) = 8 = 8
phi(3*7) = 12 = 12
phi(3*11) = 20 = 20
phi(3*13) = 24 = 24
phi(3*17) = 32 = 32
phi(3*19) = 36 = 36
phi(5*2) = 4 = 4
phi(5*3) = 8 = 8
phi(5*7) = 24 = 24
phi(5*11) = 40 = 40
phi(5*13) = 48 = 48
phi(5*17) = 64 = 64
phi(5*19) = 72 = 72
phi(7*2) = 6 = 6
phi(7*3) = 12 = 12
phi(7*5) = 24 = 24
phi(7*11) = 60 = 60
phi(7*13) = 72 = 72
phi(7*17) = 96 = 96
phi(7*19) = 108 = 108
phi(11*2) = 10 = 10
phi(11*3) = 20 = 20
phi(11*5) = 40 = 40
phi(11*7) = 60 = 60
phi(11*13) = 120 = 120
phi(11*17) = 160 = 160
phi(11*19) = 180 = 180
phi(13*2) = 12 = 12
phi(13*3) = 24 = 24
phi(13*5) = 48 = 48
phi(13*7) = 72 = 72
phi(13*11) = 120 = 120
phi(13*17) = 192 = 192
phi(13*19) = 216 = 216
phi(17*2) = 16 = 16
phi(17*3) = 32 = 32
phi(17*5) = 64 = 64
phi(17*7) = 96 = 96
phi(17*11) = 160 = 160
phi(17*13) = 192 = 192
phi(17*19) = 288 = 288
phi(19*2) = 18 = 18
phi(19*3) = 36 = 36
phi(19*5) = 72 = 72
phi(19*7) = 108 = 108
phi(19*11) = 180 = 180
phi(19*13) = 216 = 216
phi(19*17) = 288 = 288
Looking at the data we guess (Dave guesses): phi(p*q) = p*q - p - q + 1 = (p-1)*(q-1) Conjecutre #2 : phi(p*q) = (p-1)*(q-1) Question still: What is phi(p^k*q), phi(p^k*q^l), phi(p*q*r), phi(p^k*q^l*r^j), phi(p1^k1*p2^k2*p3^k3*...*pm^km) for p in primes20 do
for q in primes20 do
if p<>q then printf("phi(%d^2*%d) = %d\n",p,q,phi(p^2*q)); fi;
od;
od; Conjecture: phi(p^2*q) = p*(p-1)*(q-1)
Conjecture: phi(p^3*q) = p^2*(p-1)*(q-1) Conjecture: phi(p^k*q) = p^(k-1)*(p-1)*(q-1) Conjecutre: phi(p^k*q^l) = p^(k-1)*q^(l-1)*(p-1)*(q-1) ... Conjecture: phi(p1^k1*p2^k2*...pm^km) = p1^(k1-1)*(p1-1)*p2^(k2-1)*(p2-1)*...*pm^(km-1)*(pm-1) Check this for the first 20 integers: for n from 1 to 20 do
print([n,phi(n)]);
od; NiM3JCIiIkYk NiM3JCIiIyIiIg== NiM3JCIiJCIiIw== NiM3JCIiJSIiIw== NiM3JCIiJiIiJQ== NiM3JCIiJyIiIw== NiM3JCIiKCIiJw== NiM3JCIiKSIiJQ== NiM3JCIiKiIiJw== NiM3JCIjNSIiJQ== NiM3JCIjNiIjNQ== NiM3JCIjNyIiJQ== NiM3JCIjOCIjNw== NiM3JCIjOSIiJw== NiM3JCIjOiIiKQ== NiM3JCIjOyIiKQ== NiM3JCIjPCIjOw== NiM3JCIjPSIiJw== NiM3JCIjPiIjPQ== NiM3JCIjPyIiKQ== ifactor(294); NiMqKC1JIUc2IjYjIiIjIiIiLUYlNiMiIiRGKS1GJTYjIiIoRig=