主题:怎样用通用公式计算勾股数和寻找质数
rcggf
[专家分:0] 发布于 2011-11-13 10:07:00
作者:蓉城勾股风
2011年7月27日
我们知道,著名的黄金分割是将一条线段按照比例分成不相等的两部分,最后得到0.618… …。计算勾股数也可以采用分割线段的方法。这是一条条由勾的平方组成的特殊线段。将这条线段分成不相等的两个正整数线段,与原线段组成一个直角三角形,使“弦股之差等于A(正整数),弦股之和等于勾的平方除以A”。即c–b = A , c + b = a^2/A, 整理后得到计算勾股数的通用公式:
b = (a^2 – A^2) / 2A
c = (a^2 + A^2) / 2A
当A=1时,则变成平方数二分法公式;
当A=2时,则变成平方数四分法公式;
当A=3时,则变成平方数六分法公式;
… …
当A=1、3、5… …时,勾为奇数时用此公式;
当A=2、4、6… …时,勾为偶数时用此公式;
下面我们用通用公式计算勾股数和寻找质数:
一.勾为偶数时,用A=2、4、6… …< 1/2a逐一带入公式进行计算。
例1.a = 36, 则A=2、4、6 … …18代入公式计算得到
A=2 36 323 325 (勾股数)
A=4 36 160 164(派生)
A=6 36 105 111(派生)
A=8 36 77 85(勾股数)
A=12 36 48 60(派生)
上述勾股数中:
(1)股弦为偶数,则为派生勾股数;
(2)股弦为奇数,但有公约数(如A=6时,有公约数3),同样为派生勾股数;
(3)股弦为奇数且互质,没有公约数,(如A=2,A=8)则为基本勾股数。
这样,我们就将派生勾股数和基本勾股数分离开来了。
二. 勾为奇数时,用A=1、3、5… …<1/2a逐一代入公式进行计算。
例2.a = 51, 则A=1、3、5… …25代入公式计算得到
A=1 51 1300 1301 (勾股数)
A=3 51 432 435 (派生)
A=9 51 140 149 (勾股数)
A=17 51 68 85 (派生)
上述勾股数中:
(1)a除以A能整除的(A=3、A=17),其对应的勾股数则为派生勾股数;
(2)其余(A=1、A=9),其对应的勾股数则为基本勾股数。
这样,我们就将派生勾股数和基本勾股数分离开来了。
三.怎样用通用公式寻找质数
任意给出一个奇数a , 用A=1、3、5… …< 1/2a逐一代入
通用公式计算:
1.如果对应产生两组勾股数,则停止往下计算,a必然是合数;
2.如果将A值逐一代入通用公式计算,最终只有用A=1(平方数
二分法)计算的唯一一组勾股数,则a必然是质数!
例3 . a=87, 则A=1、3、5… … 43代入公式计算得到
A=1 87 3784 3785
A=3 87 1260 1263
出现两组勾股数,停止计算。故87为合数(87=29×3)。
例4. a=97, 则A=1、3、5… … 48代入公式计算得到
A=1 97 4704 4705
最终只有用A=1(平方数二分法)计算的唯一一组勾股数,
故97为质数!
人们在寻找求质数的公式时,怎么也不会想到质数和勾股数
之间存在必然的联系。在应用通用公式计算勾股数时,我们巧妙的用A值逐个代入公式进行计算。利用平方数二分法,从而发现“质数隐藏依附于勾股数之中”。在这里,质数不是用一个公式直接计算出来的,而是在计算勾股数的过程中自然产生的。
表面上看来,排列无序没有规律可循的质数,在勾股数世界
里,却遵循着平方数二分法的模式源源不断地有序的产生。
现在要寻找世界上最大的质数,只是编写程序加上计算机本
身内存容量来决定。
回复列表 (共3个回复)
沙发
rcggf [专家分:0] 发布于 2011-11-13 10:10:00
用Python程序计算勾股数(含派生勾股数):
a = 3
while True:
if a % 2 == 0:
r = range(2, a/2 + 2, 2)
else:
r = range(1, int(a/2)+1, 2)
r.reverse()
for x in r:
b = float((a * a - x * x)) / (2 * x)
if b != int(b):
continue
b = int(b)
c = (a * a + x * x) / (2 * x)
if b < a:
continue
print a, b, c
a += 1
部分运行结果:
3 4 5 , 5 12 13 , 6 8 10 , 7 24 25 , 8 15 17 , 9 12 15 , 9 40 41 , 10 24 26 , 11 60 61 , 12 16 20 , 12 35 37 , 13 84 85 , 14 48 50 , 15 20 25 , 15 36 39 , 15 112 113 , 16 30 34 , 16 63 65 , 17 144 145 , 18 24 30 , 18 80 82 , 19 180 181 , 20 21 29 , 20 48 52 , 20 99 101 , 21 28 35 , 21 72 75 , 21 220 221 , 22 120 122 , 23 264 265 , 24 32 40 , 24 45 51 , 24 70 74 , 24 143 145 , 25 60 65 , 25 312 313 , 26 168 170 , 27 36 45 , 27 120 123 , 27 364 365 , 28 45 53 , 28 96 100 , 28 195 197 , 29 420 421 , 30 40 50 , 30 72 78 , 30 224 226 , 31 480 481 , 32 60 68 , 32 126 130 , 32 255 257 , 33 44 55 , 33 56 65 , 33 180 183 , 33 544 545 , 34 288 290 , 35 84 91 , 35 120 125 , 35 612 613 , 36 48 60 , 36 77 85 , 36 105 111 , 36 160 164 , 36 323 325 , 37 684 685 , 38 360 362 , 39 52 65 , 39 80 89 , 39 252 255 , 39 760 761 , 40 42 58 , 40 75 85 , 40 96 104 , 40 198 202 , 40 399 401 , 41 840 841 , 42 56 70 , 42 144 150 , 42 440 442 , 43 924 925 , 44 117 125 , 44 240 244 , 44 483 485 , 45 60 75 , 45 108 117 , 45 200 205 , 45 336 339 , 45 1012 1013 , 46 528 530 , 47 1104 1105 , 48 55 73 , 48 64 80 , 48 90 102 , 48 140 148 , 48 189 195 , 48 286 290 , 48 575 577 , 49 168 175 , 49 1200 1201 , 50 120 130 , 50 624 626 , 51 68 85 , 51 140 149 , 51 432 435 , 51 1300 1301 , 52 165 173 , 52 336 340 , 52 675 677 , 53 1404 1405 , 54 72 90 , 54 240 246 , 54 728 730 , 55 132 143 , 55 300 305 , 55 1512 1513 , 56 90 106 , 56 105 119 , 56 192 200 , 56 390 394 , 56 783 785 , 57 76 95 , 57 176 185 , 57 540 543 , 57 1624 1625 , 58 840 842 , 59 1740 1741 , 60 63 87 , 60 80 100 , 60 91 109 , 60 144 156 , 60 175 185 , 60 221 229 , 60 297 303 , 60 448 452 , 60 899 901 , 61 1860 1861 , 62 960 962 , 63 84 105 , 63 216 225 , 63 280 287 , 63 660 663 , 63 1984 1985 , 64 120 136 , 64 252 260 , 64 510 514 , 64 1023 1025 , 65 72 97 , 65 156 169 , 65 420 425 , 65 2112 2113 , 66 88 110 , 66 112 130 , 66 360 366 , 66 1088 1090 , 67 2244 2245 , 68 285 293 , 68 576 580 , 68 1155 1157 , 69 92 115 , 69 260 269 , 69 792 795 , 69 2380 2381 , 70 168 182 , 70 240 250 , 70 1224 1226 , 71 2520 2521 , 72 96 120 , 72 135 153 , 72 154 170 , 72 210 222 , 72 320 328 , 72 429 435 , 72 646 650 , 72 1295 1297 , 73 2664 2665 , 74 1368 1370 , 75 100 125 , 75 180 195 , 75 308 317 , 75 560 565 , 75 936 939 , 75 2812 2813 , 76 357 365 , 76 720 724 , 76 1443 1445 , 77 264 275 , 77 420 427 , 77 2964 2965 , 78 104 130 , 78 160 178 , 78 504 510 , 78 1520 1522 , 79 3120 3121 , 80 84 116 , 80 150 170 , 80 192 208 , 80 315 325 , 80 396 404 , 80 798 802 , 80 1599 1601 , 81 108 135 , 81 360 369 , 81 1092 1095 , 81 3280 3281 , 82 1680 1682 , 83 3444 3445 , 84 112 140 , 84 135 159 , 84 187 205 , 84 245 259 , 84 288 300 , 84 437 445 , 84 585 591 , 84 880 884 , 84 1763 1765 , 85 132 157 , 85 204 221 , 85 720 725 , 85 3612 3613 , 86 1848 1850 , 87 116 145 , 87 416 425 , 87 1260 1263 , 87 3784 3785 , 88 105 137 , 88 165 187 , 88 234 250 , 88 480 488 , 88 966 970 , 88 1935 1937 , 89 3960 3961 , 90 120 150 , 90 216 234 , 90 400 410 , 90 672 678 , 90 2024 2026 , 91 312 325 , 91 588 595 , 91 4140 4141 , 92 525 533 , 92 1056 1060 , 92 2115 2117 , 93 124 155 , 93 476 485 , 93 1440 1443 , 93 4324 4325 , 94 2208 2210 , 95 168 193 , 95 228 247 , 95 900 905 , 95 4512 4513 , 96 110 146 , 96 128 160 , 96 180 204 , 96 247 265 , 96 280 296 , 96 378 390 , 96 572 580 , 96 765 771 , 96 1150 1154 , 96 2303 2305
板凳
rcggf [专家分:0] 发布于 2011-11-13 10:12:00
用Python程序计算基本勾股数:
a = 3
while True:
if a % 2 == 0:
r = range(2, a/2 + 2, 2)
else:
r = range(1, int(a/2)+1, 2)
r.reverse()
for x in r:
b = float((a * a - x * x)) / (2 * x)
if b != int(b):
continue
b = int(b)
c = (a * a + x * x) / (2 * x)
if b < a:
continue
if a % 2 == 0:
if a >= 40:
if b % 2 == 0 and c % 2 == 0:
continue
if b % 10 == 5 and c % 10 == 5:
continue
if (float(a) / x) == a / x:
continue
else:
if x != 1 and a % x == 0:
continue
print a, b, c, ',',
a = a + 1
部分运行结果:
3 4 5 , 5 12 13 , 6 8 10 , 7 24 25 , 8 15 17 , 9 40 41 , 10 24 26 , 11 60 61 , 12 16 20 , 12 35 37 , 13 84 85 , 14 48 50 , 15 112 113 , 16 30 34 , 16 63 65 , 17 144 145 , 18 24 30 , 18 80 82 , 19 180 181 , 20 21 29 , 20 48 52 , 20 99 101 , 21 220 221 , 22 120 122 , 23 264 265 , 24 32 40 , 24 45 51 , 24 70 74 , 24 143 145 , 25 312 313 , 26 168 170 , 27 364 365 , 28 45 53 , 28 96 100 , 28 195 197 , 29 420 421 , 30 40 50 , 30 72 78 , 30 224 226 , 31 480 481 , 32 60 68 , 32 126 130 , 32 255 257 , 33 56 65 , 33 544 545 , 34 288 290 , 35 612 613 , 36 48 60 , 36 77 85 , 36 105 111 , 36 160 164 , 36 323 325 , 37 684 685 , 38 360 362 , 39 80 89 , 39 760 761 , 41 840 841 , 43 924 925 , 44 117 125 , 45 1012 1013 , 47 1104 1105 , 48 55 73 , 49 1200 1201 , 51 140 149 , 51 1300 1301 , 52 165 173 , 53 1404 1405 , 55 1512 1513 , 57 176 185 , 57 1624 1625 , 59 1740 1741 , 60 63 87 , 60 91 109 , 60 221 229 , 61 1860 1861 , 63 1984 1985 , 65 72 97 , 65 2112 2113 , 67 2244 2245 , 68 285 293 , 69 260 269 , 69 2380 2381 , 71 2520 2521 , 73 2664 2665 , 75 308 317 , 75 2812 2813 , 76 357 365 , 77 2964 2965 , 79 3120 3121 , 81 3280 3281 , 83 3444 3445 , 84 135 159 , 84 187 205 , 84 437 445 , 85 132 157 , 85 3612 3613 , 87 416 425 , 87 3784 3785 , 88 105 137 , 89 3960 3961 , 91 4140 4141 , 92 525 533 , 93 476 485 , 93 4324 4325 , 95 168 193 , 95 4512 4513 , 96 247 265 , 97 4704 4705 , 99 168 195 , 99 4900 4901 , 100 621 629 , 101 5100 5101 , 103 5304 5305 , 104 153 185 , 105 208 233 , 105 608 617 , 105 5512 5513 , 107 5724 5725 , 108 231 255 , 108 725 733 , 109 5940 5941 , 111 680 689 , 111 6160 6161 , 113 6384 6385 , 115 252 277 , 115 6612 6613 , 116 837 845 , 117 240 267 , 117 6844 6845 , 119 120 169 , 119 7080 7081 , 120 209 241 , 120 391 409 , 121 7320 7321 , 123 836 845 , 123 7564 7565 , 124 957 965 , 125 7812 7813 , 127 8064 8065 , 129 920 929 , 129 8320 8321 , 131 8580 8581 , 132 351 375 , 132 475 493 , 132 1085 1093 , 133 156 205 , 133 8844 8845 , 135 352 377 , 135 9112 9113 , 136 273 305 , 137 9384 9385 , 139 9660 9661 , 140 147 203 , 140 171 221 , 140 1221 1229 , 141 1100 1109 , 141 9940 9941 , 143 10224 10225 , 144 165 219 , 145 408 433 , 145 10512 10513 , 147 1196 1205 , 147 10804 10805 , 148 1365 1373 , 149 11100 11101 , 151 11400 11401 , 152 345 377 , 153 420 447 , 153 11704 11705 , 155 468 493 , 155 12012 12013 , 156 495 519 , 156 667 685 , 156 1517 1525 , 157 12324 12325 , 159 1400 1409 , 159 12640 12641 , 160 231 281 , 161 240 289 , 161 12960 12961 , 163 13284 13285 , 164 1677 1685 , 165 280 325 , 165 532 557 , 165 1508 1517 , 165 13612 13613 , 167 13944 13945 , 168 425 457 , 168 775 793 , 169 14280 14281 , 171 528 555 , 171 14620 14621 , 172 1845 1853 , 173 14964 14965 , 175 288 337 , 175 15312 15313 , 177 1736 1745 , 177 15664 15665 , 179 16020 16021 , 180 189 261 , 180 273 327 , 180 299 349 , 180 663 687 , 180 2021 2029 , 181 16380 16381 , 183 1856 1865 , 183 16744 16745 , 184 513 545 , 185 672 697 , 185 17112 17113 , 187 17484 17485 , 188 2205 2213 , 189 340 389 , 189 17860 17861 , 191 18240 18241 , 192 1015 1033 , 193 18624 18625 , 195 216 291 , 195 400 445 , 195 748 773 , 195 2108 2117 , 195 19012 19013 , 196 315 371 , 196 2397 2405 , 197 19404 19405 , 199 19800 19801 , 200 609 641
3 楼
rcggf [专家分:0] 发布于 2011-11-13 10:14:00
用python程序计算质数:
a = 3
print '2 ',
while True:
count = 0
for x in range(1, int(a/2) + 1, 2):
b = float((a * a - x * x)) / (2 * x)
if b != int(b):
continue
count += 1
if count == 2:
break
if count == 1:
print a, ' ',
a = a + 2
部分运行结果:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997
我来回复