Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

All published worksheets from http://sagenb.org

Views: 168726
Image: ubuntu2004

Bij het artikel: "On the representation of Natural Numbers as Sums of Squares",

Americ. Math. Monthly, 112, feb 2005, L. Panaitopol

def CkOdd(a,b,c,lim): R = set([]) for i in range(lim): for j in range(lim): for k in range(lim): R.add(a*i^2+b*j^2+c*k^2) Rtotlimsquare = set(range(lim^2)).difference(R) evendeelR = Rtotlimsquare.difference(set[0,2,4,..,lim^2]) return sorted(list(evendeelR))
CkOdd(1,1,2,75);
[]
CkOdd(1,2,3,75)
[]
CkOdd(1,2,4,75)
[]

De bovenstaande drie checks bevestigen Thm1 voor de oneven getallen t/m 75. Elke andere kwadratische functie zou dus niet alle oneven getallen meer kunnen representeren. We testen een voorbeeld.

CkOdd(1,3,4,20)
[15, 33, 51, 69, 87, 105, 123, 135, 141, 159, 177, 195, 213, 231, 249, 267, 285, 297, 303, 321, 339, 357, 375, 393]

Nu gaan we Thm2 controleren.

def CkEven(a,b,c,lim): R = set([]) for i in range(lim): for j in range(lim): for k in range(lim): R.add(a*i^2+b*j^2+c*k^2) Rtotlimsquare = set(range(lim^2)).difference(R) onevendeelR = Rtotlimsquare.difference(set[1,3,5,..,lim^2]) return sorted(list(onevendeelR))
CkEven(1,1,1,20)
[28, 60, 92, 112, 124, 156, 188, 220, 240, 252, 284, 316, 348, 368, 380]

Dit confirmeert het resultaat van Gauss: de getallen die niet als som van drie kwadraten gerepresenteerd kunnen worden, zijn van de vorm $4^i*(8k + 7)$, voor i en k niet-negatief.

We testen nu de drie kwadratische vormen die wel alle oneven getallen representeren (maar niet alle even, dus).

t1 = CkEven(1,1,2,20); t1
[14, 30, 46, 56, 62, 78, 94, 110, 120, 126, 142, 158, 174, 184, 190, 206, 222, 224, 238, 248, 254, 270, 286, 302, 312, 318, 334, 350, 366, 376, 382, 398]
t2 = CkEven(1,2,3,20); t2
[10, 26, 40, 42, 58, 74, 90, 104, 106, 122, 138, 154, 160, 168, 170, 186, 202, 218, 232, 234, 250, 266, 282, 296, 298, 314, 330, 346, 360, 362, 378, 394]
t3 = CkEven(1,2,4,20); t3
[14, 30, 46, 56, 62, 78, 94, 110, 120, 126, 142, 158, 174, 184, 190, 206, 222, 224, 238, 248, 254, 270, 286, 302, 312, 318, 334, 350, 366, 376, 382, 398]

De vraag is nu: valt er een patroon te ontdekken in deze lijstjes van niet-gerepresenteerde getallen?

for m in t1: print(m%64)
14 30 46 56 62 14 30 46 56 62 14 30 46 56 62 14 30 32 46 56 62 14 30 46 56 62 14 30 46 56 62 14

Hier valt wel een patroon van te maken: alleen de 32's verstoren de regelmaat een beetje. Hoe zit dat?

t1 = CkEven(1,1,2,60); t1
[14, 30, 46, 56, 62, 78, 94, 110, 120, 126, 142, 158, 174, 184, 190, 206, 222, 224, 238, 248, 254, 270, 286, 302, 312, 318, 334, 350, 366, 376, 382, 398, 414, 430, 440, 446, 462, 478, 480, 494, 504, 510, 526, 542, 558, 568, 574, 590, 606, 622, 632, 638, 654, 670, 686, 696, 702, 718, 734, 736, 750, 760, 766, 782, 798, 814, 824, 830, 846, 862, 878, 888, 894, 896, 910, 926, 942, 952, 958, 974, 990, 992, 1006, 1016, 1022, 1038, 1054, 1070, 1080, 1086, 1102, 1118, 1134, 1144, 1150, 1166, 1182, 1198, 1208, 1214, 1230, 1246, 1248, 1262, 1272, 1278, 1294, 1310, 1326, 1336, 1342, 1358, 1374, 1390, 1400, 1406, 1422, 1438, 1454, 1464, 1470, 1486, 1502, 1504, 1518, 1528, 1534, 1550, 1566, 1582, 1592, 1598, 1614, 1630, 1646, 1656, 1662, 1678, 1694, 1710, 1720, 1726, 1742, 1758, 1760, 1774, 1784, 1790, 1806, 1822, 1838, 1848, 1854, 1870, 1886, 1902, 1912, 1918, 1920, 1934, 1950, 1966, 1976, 1982, 1998, 2014, 2016, 2030, 2040, 2046, 2062, 2078, 2094, 2104, 2110, 2126, 2142, 2158, 2168, 2174, 2190, 2206, 2222, 2232, 2238, 2254, 2270, 2272, 2286, 2296, 2302, 2318, 2334, 2350, 2360, 2366, 2382, 2398, 2414, 2424, 2430, 2446, 2462, 2478, 2488, 2494, 2510, 2526, 2528, 2542, 2552, 2558, 2574, 2590, 2606, 2616, 2622, 2638, 2654, 2670, 2680, 2686, 2702, 2718, 2734, 2744, 2750, 2766, 2782, 2784, 2798, 2808, 2814, 2830, 2846, 2862, 2872, 2878, 2894, 2910, 2926, 2936, 2942, 2944, 2958, 2974, 2990, 3000, 3006, 3022, 3038, 3040, 3054, 3064, 3070, 3086, 3102, 3118, 3128, 3134, 3150, 3166, 3182, 3192, 3198, 3214, 3230, 3246, 3256, 3262, 3278, 3294, 3296, 3310, 3320, 3326, 3342, 3358, 3374, 3384, 3390, 3406, 3422, 3438, 3448, 3454, 3470, 3486, 3502, 3512, 3518, 3534, 3550, 3552, 3566, 3576, 3582, 3584, 3598]
T1 = set([]); for i in range(60): T1.add(14+i*64) T1.add(30+i*64) T1.add(46+i*64) T1.add(56+i*64) T1.add(62+i*64) sorted(list(T1))
[14, 30, 46, 56, 62, 78, 94, 110, 120, 126, 142, 158, 174, 184, 190, 206, 222, 238, 248, 254, 270, 286, 302, 312, 318, 334, 350, 366, 376, 382, 398, 414, 430, 440, 446, 462, 478, 494, 504, 510, 526, 542, 558, 568, 574, 590, 606, 622, 632, 638, 654, 670, 686, 696, 702, 718, 734, 750, 760, 766, 782, 798, 814, 824, 830, 846, 862, 878, 888, 894, 910, 926, 942, 952, 958, 974, 990, 1006, 1016, 1022, 1038, 1054, 1070, 1080, 1086, 1102, 1118, 1134, 1144, 1150, 1166, 1182, 1198, 1208, 1214, 1230, 1246, 1262, 1272, 1278, 1294, 1310, 1326, 1336, 1342, 1358, 1374, 1390, 1400, 1406, 1422, 1438, 1454, 1464, 1470, 1486, 1502, 1518, 1528, 1534, 1550, 1566, 1582, 1592, 1598, 1614, 1630, 1646, 1656, 1662, 1678, 1694, 1710, 1720, 1726, 1742, 1758, 1774, 1784, 1790, 1806, 1822, 1838, 1848, 1854, 1870, 1886, 1902, 1912, 1918, 1934, 1950, 1966, 1976, 1982, 1998, 2014, 2030, 2040, 2046, 2062, 2078, 2094, 2104, 2110, 2126, 2142, 2158, 2168, 2174, 2190, 2206, 2222, 2232, 2238, 2254, 2270, 2286, 2296, 2302, 2318, 2334, 2350, 2360, 2366, 2382, 2398, 2414, 2424, 2430, 2446, 2462, 2478, 2488, 2494, 2510, 2526, 2542, 2552, 2558, 2574, 2590, 2606, 2616, 2622, 2638, 2654, 2670, 2680, 2686, 2702, 2718, 2734, 2744, 2750, 2766, 2782, 2798, 2808, 2814, 2830, 2846, 2862, 2872, 2878, 2894, 2910, 2926, 2936, 2942, 2958, 2974, 2990, 3000, 3006, 3022, 3038, 3054, 3064, 3070, 3086, 3102, 3118, 3128, 3134, 3150, 3166, 3182, 3192, 3198, 3214, 3230, 3246, 3256, 3262, 3278, 3294, 3310, 3320, 3326, 3342, 3358, 3374, 3384, 3390, 3406, 3422, 3438, 3448, 3454, 3470, 3486, 3502, 3512, 3518, 3534, 3550, 3566, 3576, 3582, 3598, 3614, 3630, 3640, 3646, 3662, 3678, 3694, 3704, 3710, 3726, 3742, 3758, 3768, 3774, 3790, 3806, 3822, 3832, 3838]
rest = sorted(list(set(t1).difference(T1))); rest
[224, 480, 736, 896, 992, 1248, 1504, 1760, 1920, 2016, 2272, 2528, 2784, 2944, 3040, 3296, 3552, 3584]

Dit zijn dus de getallen de regelmaat modulo 64 onderbreken: allemaal deelbaar door 32.

plot(rest)
for m in rest: m/32
7 15 23 28 31 39 47 55 60 63 71 79 87 92 95 103 111 112

Hier zien we de getallen van Gauss weer terug: 4i(7+8k)4^i*(7+8*k) voor ii en kk niet-negatief.

G = set([]); for i in range(3): for k in range(20): G.add(32*4^i*(7+8*k)) sorted(list(G))
[224, 480, 736, 896, 992, 1248, 1504, 1760, 1920, 2016, 2272, 2528, 2784, 2944, 3040, 3296, 3552, 3584, 3808, 3968, 4064, 4320, 4576, 4832, 4992, 5088, 6016, 7040, 7680, 8064, 9088, 10112, 11136, 11776, 12160, 13184, 14208, 15232, 15872, 16256, 17280, 18304, 19328, 19968, 20352, 24064, 28160, 32256, 36352, 40448, 44544, 48640, 52736, 56832, 60928, 65024, 69120, 73216, 77312, 81408]
set(rest).difference(G)
set([])

We zijn er: de getallen NIET gerepresenteerd door x2+y2+2z2x^2+y^2+2*z^2 zijn de getallen uit het regelmatige rijtje modulo 64, PLUS het 32-voud van alle Gausse-getallen die niet door x2+y2+z2x^2+y^2+z^2 gerepresenteerd kunnen worden.