Perfect Number code

Perfect Numbers in Forth

Perfect Numbers

From Simon Singh's book: "Fermat's Last Theorem", Fourth Estate, London 1997, ISBN 1-85702-669-1.

Pythagoras defined a Perfect Number as a number A whose divisors add up to A itself. When this sum is larger than A it is called excessive, when it is smaller than A it is called defective.
Example 1: divisors of 10 = {1 2 5}, Sum = 1 + 2 + 5 = 8. 10 is defective.
Example 2: divisors of 6 = {1 2 3}, Sum = 1 + 2 + 3 = 6. 6 is perfect.
Example 3: divisors of 12 = {1 2 3 4 6}, Sum = 1 + 2 + 3 + 4 + 6 = 16. 12 is excessive.

The first perfect number after 6 is 28: {1, 2, 4, 7, 14}. The next are 496, 8,128, 33,550,336, 8,589,869,056.

Pythagoras found that a perfect number is the sum of a series of consecutive rational numbers:

       6 = 1 + 2 + 3
      28 = 1 + 2 + 3 + 4 + 5 + 6 + 7
     496 = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 ... 30 + 31
   8,128 = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 ... 126 + 127
 
Pythagoras also found that the divisors of 2^n add up to 2^n - 1, i.e.,
   2^2 =  4, Divisors 1, 2          Sum =  3 = 2^2 - 1
   2^3 =  8, Divisors 1, 2, 4       Sum =  7 = 2^3 - 1
   2^4 = 16, Divisors 1, 2, 4, 8    Sum = 15 = 2^4 - 1
 
Euclid found that perfect numbers are always the multiple of two numbers, n1 a power of two, n2 the next power of 2 minus 1:
 
      6 = 2^1 * (2^2 - 1)
     28 = 2^2 * (2^3 - 1)
    496 = 2^4 * (2^5 - 1)
  8,128 = 2^6 * (2^7 - 1)
 

Euclid also found that when n2 is prime n is a perfect number.

State of the art (in 1997) was: 2^216,090 * (2^216,091 - 1) is perfect.

Observations

The perfect number A can be characterized by a unique number n, where A = 2^n * (2^n-1 - 1). So instead of looking for A we can also look for its 'root' n.

To check A, we must find the sum of all of the divisors of 2^n * (2^n-1 - 1), or, equivalently,

    [1] x1 = the sum of the divisors of 2^n 
       ( cross-product of unique factors ) 
    [2]	x2 = the sum of the divisors of (2^n-1 - 1). 
 
According to Pythagoras, x1 = 2^n-1. The number 2^n - 1 is prime when n is a Mersenne number [Knuth]
   {   2,     3,     5,     7,    13,    17,    19,    31,    61, 
      89,   107,   127,   521,   607,  1279,  2203,  2281,  3217, 
    4253,  4423,  9689,  9941, 11213, 19937, 21701, 23209, 44497  }.
 
So together with Euclid's statement, when n2 is prime n is a perfect number, we know enough!

These are the Perfect Numbers corresponding to the first 17 Mersenne primes:

	Can do tests for n <= 48000
	
	Perfect number (    2 ) -> 6 (0.001 seconds elapsed.)

	Perfect number (    3 ) -> 28 (0.000 seconds elapsed.)

	Perfect number (    5 ) -> 496 (0.000 seconds elapsed.)

	Perfect number (    7 ) -> 8,128 (0.001 seconds elapsed.)

	Perfect number (   13 ) -> 33,550,336 (0.000 seconds elapsed.)

	Perfect number (   17 ) -> 8,589,869,056 (0.001 seconds elapsed.)

	Perfect number (   19 ) -> 137,438,691,328 (0.001 seconds elapsed.)

	Perfect number (   31 ) -> 2,305,843,008,139,952,128 (0.001 seconds elapsed.)

	Perfect number (   61 ) -> 2,658,455,991,569,831,744,654,692,615,953,842,176 (0.002 seconds elapsed.)

	Perfect number (   89 ) -> 
	191,561,942,608,236,107,294,793,378,084,303,638,130,997,321,548,169,216 (0.004 seconds elapsed.)
	
	Perfect number (  107 ) -> 
	 13,164,036,458,569,648,337,239,753,460,458,722,910,223,472,318,386,943,117,783,728,128 
	(0.004 seconds elapsed.)
	
	Perfect number (  127 ) -> 
	 14,474,011,154,664,524,427,946,373,126,085,988,481,573,677,491,474,835,889,066,354,349,131,199,
	152,128 (0.005 seconds elapsed.)
	
	Perfect number (  521 ) -> 
	 23,562,723,457,267,347,065,789,548,996,709,904,988,477,547,858,392,600,710,143,027,597,506,337,
	283,178,622,239,730,365,539,602,600,561,360,255,566,462,503,270,175,052,892,578,043,215,543,382,
	498,428,777,152,427,010,394,496,918,664,028,644,534,128,033,831,439,790,236,838,624,033,171,435,
	922,356,643,219,703,101,720,713,163,527,487,298,747,400,647,801,939,587,165,936,401,087,419,375,
	649,057,918,549,492,160,555,646,976 (0.049 seconds elapsed.)
	
	Perfect number (  607 ) -> 
	141,053,783,706,712,069,063,207,958,086,063,189,881,486,743,514,715,667,838,838,675,999,954,867,
	742,652,380,114,104,193,329,037,690,251,561,950,568,709,829,327,164,087,724,366,370,087,116,731,
	268,159,313,652,487,450,652,439,805,877,296,207,297,446,723,295,166,658,228,846,926,807,786,652,
	870,188,920,867,879,451,478,364,569,313,922,060,370,695,064,736,073,572,378,695,176,473,055,266,
	826,253,284,886,383,715,072,974,324,463,835,300,053,138,429,460,296,575,143,368,065,570,759,537,
	328,128 (0.065 seconds elapsed.)
	
	Perfect number ( 1279 ) -> 
	 54,162,526,284,365,847,412,654,465,374,391,316,140,856,490,539,031,695,784,603,920,818,387,206,
	994,158,534,859,198,999,921,056,719,921,919,057,390,080,263,646,159,280,013,827,605,439,746,262,
	788,903,057,303,445,505,827,028,395,139,475,207,769,044,924,431,494,861,729,435,113,126,280,837,
	904,930,462,740,681,717,960,465,867,348,720,992,572,190,569,465,545,299,629,919,823,431,031,092,
	624,244,463,547,789,635,441,481,391,719,816,441,605,586,788,092,147,886,677,321,398,756,661,624,
	714,551,726,964,302,217,554,281,784,254,817,319,611,951,659,855,553,573,937,788,923,405,146,222,
	324,506,715,979,193,757,372,820,860,878,214,322,052,227,584,537,552,897,476,256,179,395,176,624,
	426,314,480,313,446,935,085,203,657,584,798,247,536,021,172,880,403,783,048,602,873,621,259,313,
	789,994,900,336,673,941,503,747,224,966,984,028,240,806,042,108,690,077,670,395,259,231,894,666,
	273,615,212,775,603,535,764,707,952,250,173,858,305,171,028,603,021,234,896,647,851,363,949,928,
	904,973,292,145,107,505,979,911,456,221,519,899,345,764,984,291,328 (0.418 seconds elapsed.)
	
	Perfect number ( 2203 ) -> 
	  1,089,258,355,057,829,337,698,225,273,522,048,981,957,108,454,302,608,067,318,906,618,508,470,
	155,298,616,996,291,940,961,858,901,379,546,182,685,531,220,055,762,780,759,342,407,499,066,046,
	704,182,083,087,124,626,926,378,164,410,931,450,968,826,355,205,573,671,671,624,202,686,633,360,
	807,123,109,470,452,668,371,537,599,662,797,484,934,359,039,779,954,213,666,598,820,299,501,366,
	380,164,619,080,260,403,235,229,556,730,554,163,992,303,009,752,651,350,320,619,930,563,673,695,
	280,153,023,049,498,468,696,618,144,072,021,372,831,425,963,701,460,505,606,378,119,245,841,386,
	552,600,145,384,072,983,309,717,141,950,085,498,085,709,671,387,054,868,320,477,972,299,055,273,
	914,798,446,936,214,147,860,706,887,052,107,312,380,067,072,602,317,009,422,809,314,774,791,894,
	700,769,891,009,818,743,169,303,028,154,303,290,071,199,392,984,292,940,283,852,217,800,166,629,
	229,157,110,264,080,599,294,016,452,483,028,528,153,331,119,523,441,423,159,614,934,140,265,550,
	242,360,007,858,215,936,798,489,500,727,196,347,516,386,044,241,721,984,706,558,329,364,277,995,
	903,102,292,034,620,628,080,752,342,422,906,401,283,027,034,649,671,445,569,324,281,946,859,622,
	177,566,643,375,489,715,678,451,311,792,675,935,981,010,355,562,887,971,948,569,016,060,035,334,
	607,879,359,770,371,846,507,659,970,601,616,998,311,983,878,150,420,763,306,289,490,886,429,900,
	481,786,499,537,645,379,839,365,212,725,494,441,511,932,772,182,768,149,943,659,849,007,457,246,
	983,861,558,265,144,823,191,367,758,350,341,527,780,770,221,556,945,275,566,504,831,636,564,856,
	831,502,556,078,058,133,043,400,055,653,540,413,313,266,034,639,355,202,834,006,126,905,491,569,
	560,542,489,551,023,207,382,276,137,352,665,717,018,261,519,604,817,417,112,576,526,410,535,323,
	991,500,058,749,996,247,580,834,453,782,528 (1.887 seconds elapsed.)
	
	Perfect number ( 2281 ) -> 
	 99,497,054,337,086,473,442,435,202,604,522,816,989,643,863,571,126,408,511,774,020,575,773,849,
	326,355,529,178,686,629,498,151,336,416,502,516,645,641,699,516,813,140,394,897,940,636,561,646,
	545,947,753,232,301,453,603,583,223,268,085,613,647,233,768,081,645,727,669,037,394,385,696,522,
	820,301,535,888,041,815,559,513,408,036,145,123,870,584,325,525,813,950,487,109,647,770,743,827,
	362,571,822,870,567,643,040,184,723,115,825,645,590,386,313,377,067,112,638,149,253,171,843,914,
	780,065,137,373,446,222,406,322,953,569,124,771,480,101,363,180,966,448,099,882,292,453,452,395,
	428,270,875,732,536,311,539,266,115,116,490,704,940,164,192,417,744,919,250,000,894,727,407,937,
	229,829,300,578,253,427,884,494,358,459,949,535,231,819,781,361,449,649,779,252,948,099,909,821,
	642,207,485,514,805,768,288,115,583,409,148,969,875,790,523,961,878,753,124,972,681,179,944,234,
	641,016,960,011,815,788,847,436,610,192,704,551,637,034,472,552,319,820,336,532,014,561,412,028,
	820,492,176,940,418,377,074,274,389,149,924,303,484,945,446,105,121,267,538,061,583,299,291,707,
	972,378,807,395,016,030,765,440,655,601,759,109,370,564,522,647,989,156,121,804,273,012,266,011,
	783,451,102,230,081,380,401,951,383,582,987,149,578,229,940,818,181,514,046,314,819,313,206,321,
	375,973,336,785,023,565,443,101,305,633,127,610,230,549,588,655,605,951,332,351,485,641,757,542,
	611,227,108,073,263,889,434,409,595,976,835,137,412,187,025,349,639,504,404,061,654,653,755,349,
	162,680,629,290,551,644,153,382,760,681,862,294,677,414,989,047,491,922,795,707,210,920,437,811,
	136,712,794,483,496,437,355,980,833,463,329,592,838,140,157,803,182,055,197,821,702,739,206,310,
	971,006,260,383,262,542,900,044,072,533,196,137,796,552,746,439,051,760,940,430,082,375,641,150,
	129,817,960,183,028,081,010,978,780,902,441,733,680,977,714,813,543,438,752,546,136,375,675,139,
	915,776 (2.106 seconds elapsed.)
	
	Perfect number ( 3217 ) -> 
	 33,570,832,131,986,724,437,010,877,211,080,384,841,138,028,499,879,725,454,996,241,573,482,158,
	450,444,042,882,048,778,809,437,690,388,449,535,774,260,849,885,573,694,759,906,173,841,157,438,
	424,730,130,807,047,623,655,942,236,174,850,509,108,537,827,658,590,642,325,482,494,761,473,196,
	579,074,656,099,918,600,764,404,702,181,660,294,469,121,778,737,965,822,199,901,663,478,093,006,
	075,022,359,223,201,849,985,636,144,177,185,925,402,078,185,073,015,045,097,727,084,859,464,743,
	635,537,781,500,284,915,880,244,886,306,461,785,982,956,072,060,013,474,955,617,851,481,680,185,
	988,557,136,609,224,841,817,877,083,608,951,191,123,174,885,226,416,130,683,197,710,667,392,351,
	007,374,503,755,403,352,531,476,227,943,590,071,651,702,697,594,241,031,955,529,898,971,218,001,
	214,641,774,673,134,944,471,562,560,957,179,657,881,556,419,122,102,935,450,299,751,813,340,515,
	170,956,167,951,095,453,649,485,576,150,660,101,689,160,658,011,770,193,274,226,308,280,507,786,
	835,049,549,112,576,654,510,119,670,456,745,939,890,194,205,255,175,384,484,489,909,328,967,646,
	988,163,155,982,471,564,998,196,261,632,751,283,127,879,509,198,074,253,193,409,580,454,562,488,
	664,383,465,379,885,002,735,506,153,988,851,506,645,137,759,275,553,988,219,425,439,764,732,399,
	824,712,438,125,054,117,523,837,438,256,744,437,055,019,441,051,006,489,972,341,609,117,978,404,
	563,794,992,004,873,057,518,455,748,701,444,951,238,377,139,620,494,287,982,489,529,827,233,140,
	637,014,837,408,856,156,199,515,457,669,607,964,052,126,908,149,265,601,786,094,447,595,560,440,
	059,050,091,763,547,114,092,255,371,397,425,807,867,554,352,112,542,194,784,815,494,784,276,201,
	170,845,949,274,674,632,985,210,421,075,531,784,918,358,926,690,395,463,649,721,452,265,405,713,
	484,388,043,911,634,485,432,358,638,806,645,313,826,206,591,131,266,232,422,007,835,577,345,584,
	225,720,310,518,698,143,376,736,219,283,021,119,287,617,896,146,885,584,860,065,048,876,315,701,
	088,796,219,593,640,826,311,622,273,328,035,603,309,475,642,390,804,499,460,156,797,855,361,018,
	246,696,101,253,922,254,567,240,908,315,385,468,240,931,846,166,962,495,983,407,607,141,601,251,
	889,544,407,008,815,874,744,654,769,507,268,678,051,757,746,956,891,212,485,456,261,121,386,667,
	407,711,139,619,071,530,923,355,823,178,662,705,374,393,035,049,022,603,882,479,742,334,799,407,
	130,280,148,769,298,597,743,778,193,050,348,749,740,786,928,096,033,906,295,910,199,238,181,338,
	557,856,978,191,860,647,256,209,708,168,229,116,156,300,978,059,197,026,855,726,877,649,767,072,
	684,960,463,452,763,160,384,093,838,292,277,544,911,857,859,658,328,888,332,628,525,056 
	(5.630 seconds elapsed.)
	
	Perfect number ( 4253 ) -> 
	 18,201,749,040,140,430,273,835,167,914,751,015,293,362,889,506,937,596,103,357,359,437,740,048,
	438,463,485,836,303,232,258,902,400,875,568,993,809,975,036,246,337,556,768,238,366,233,707,757,
	573,415,903,278,080,066,115,951,092,522,543,145,952,013,119,010,340,408,099,881,835,975,590,975,
	835,499,003,463,227,280,543,140,756,802,691,525,621,894,771,543,951,403,656,868,707,748,606,069,
	885,095,036,335,283,528,581,813,088,651,653,833,089,052,785,834,280,723,280,067,200,484,903,706,
	704,970,113,521,040,604,064,538,274,154,252,165,373,175,595,605,248,628,998,615,687,866,235,395,
	077,520,314,640,188,634,353,318,831,397,392,517,095,413,127,961,059,169,783,805,545,093,120,277,
	974,213,161,792,712,750,189,234,973,622,853,507,624,924,636,687,588,461,310,469,170,436,099,238,
	232,492,598,937,308,477,793,932,361,698,480,685,664,770,932,715,430,491,007,662,682,405,163,044,
	765,107,996,164,343,261,202,355,969,912,750,334,459,238,591,875,176,292,279,879,181,327,972,920,
	090,211,444,842,306,766,331,109,269,166,235,125,509,668,704,478,958,734,853,068,636,529,397,153,
	443,016,761,158,813,447,481,567,868,262,367,893,981,171,020,212,189,792,514,086,148,090,215,189,
	947,704,212,407,282,687,964,267,041,783,873,543,080,261,582,448,824,858,431,838,554,183,153,705,
	837,057,341,487,700,727,731,550,997,896,239,330,477,471,263,230,726,484,877,117,521,254,868,468,
	174,015,562,068,490,713,644,719,481,693,089,433,418,532,636,835,808,942,200,716,440,819,313,366,
	362,403,191,355,576,523,173,825,131,875,335,647,759,016,207,232,990,842,875,902,548,737,480,801,
	898,289,658,229,210,850,221,695,663,421,649,611,729,577,245,208,490,877,897,945,867,171,915,873,
	804,061,345,544,603,919,338,281,884,397,538,634,259,920,738,193,259,330,950,837,923,823,615,411,
	304,543,599,290,641,330,796,754,637,229,721,314,074,245,135,865,275,394,292,301,532,835,414,540,
	035,740,253,567,232,435,673,868,968,242,806,554,916,467,387,945,199,026,147,468,808,031,055,150,
	281,915,733,287,931,898,181,708,779,241,724,409,277,593,094,799,901,224,641,825,850,183,281,480,
	975,988,801,751,016,901,958,988,814,849,430,087,926,938,683,408,662,084,176,896,164,178,170,688,
	871,544,229,415,824,450,055,526,787,148,715,365,214,142,372,692,896,788,902,761,679,810,950,828,
	268,208,180,845,309,986,581,369,910,322,372,338,718,437,892,376,924,042,425,319,226,250,711,104,
	694,125,177,110,946,650,435,829,229,609,212,441,927,473,293,781,744,486,775,943,173,110,295,432,
	226,780,186,422,343,937,384,580,708,855,852,269,417,012,387,614,583,884,866,613,236,875,101,300,
	845,603,785,945,237,925,447,338,784,922,452,682,337,026,775,686,191,693,583,794,243,538,309,813,
	874,806,083,439,394,116,832,472,101,884,074,936,138,517,168,612,519,077,402,832,074,575,032,255,
	369,216,417,037,979,614,393,919,019,507,244,388,546,924,316,787,128,440,250,098,924,928,769,352,
	393,698,587,810,869,831,127,888,084,696,751,795,845,351,130,410,199,628,821,737,636,610,886,633,
	120,714,458,623,846,784,948,362,409,208,330,416,268,144,841,565,505,869,827,619,451,490,634,144,
	640,754,203,543,507,421,045,031,995,754,480,556,197,763,855,213,987,476,437,990,952,173,006,055,
	503,017,305,481,394,836,591,954,388,794,314,558,786,433,824,434,673,257,753,459,825,605,748,638,
	411,145,315,395,326,160,048,592,155,490,496,363,095,590,187,403,880,545,069,860,151,237,473,584,
	639,382,355,987,779,291,886,392,614,452,838,326,884,468,500,853,448,420,623,482,240,841,078,202,
	705,004,101,172,745,586,672,975,106,848,437,133,377,536 (12.650 seconds elapsed.)
	
	Perfect number ( 4423 ) -> 
	 40,767,271,711,094,423,266,286,789,500,920,409,509,472,451,956,754,173,657,558,947,684,464,681,
	715,260,993,357,605,734,441,071,512,726,995,067,528,227,747,339,481,802,307,406,017,975,918,463,
	751,821,848,507,118,336,173,625,166,416,441,051,751,909,733,833,921,511,752,076,653,991,689,253,
	045,435,925,355,114,303,300,112,240,094,312,492,366,309,429,025,181,937,703,076,074,631,694,330,
	891,971,804,062,290,637,324,463,063,370,007,444,165,676,699,382,865,548,574,698,013,900,725,344,
	417,715,580,901,794,517,787,294,713,626,725,247,616,431,165,717,354,475,083,506,329,812,661,542,
	345,174,259,067,891,050,196,093,969,424,325,393,268,526,237,129,649,381,671,501,429,508,518,532,
	700,654,319,135,658,688,537,822,432,173,525,578,067,619,513,381,189,044,904,675,194,018,182,193,
	349,875,318,307,576,479,629,202,619,084,300,084,497,552,929,130,566,459,016,664,436,323,063,518,
	973,396,208,264,181,441,158,994,259,766,077,215,199,598,273,505,770,807,393,645,474,832,736,784,
	296,681,037,040,447,804,670,653,738,245,607,704,296,033,370,069,548,245,058,222,346,937,754,342,
	008,266,115,596,746,009,270,472,531,585,662,215,058,309,416,971,412,450,120,373,149,200,391,305,
	139,626,391,147,758,497,714,062,124,945,414,219,545,021,663,761,325,651,848,979,096,956,363,445,
	054,874,071,200,187,004,098,334,242,171,313,866,643,279,783,121,709,224,161,095,222,080,608,666,
	106,221,075,196,556,669,546,036,212,033,916,214,620,015,754,946,773,858,930,331,944,632,744,676,
	736,422,424,630,471,770,419,404,321,630,175,578,272,380,575,860,947,613,876,452,571,102,541,656,
	491,464,344,575,071,152,521,057,073,596,731,123,384,560,986,412,117,728,286,743,021,819,378,916,
	115,542,964,437,048,959,026,512,685,144,124,956,065,485,652,281,953,670,546,881,779,736,097,894,
	174,076,453,897,164,963,235,414,848,542,178,185,638,376,039,787,558,515,854,327,876,892,100,291,
	586,150,169,593,481,653,250,617,283,841,617,035,992,495,539,326,209,286,081,463,451,168,016,943,
	400,175,227,907,739,209,129,141,984,002,670,216,279,803,245,614,932,227,988,255,785,347,373,220,
	924,269,748,847,852,670,574,748,163,344,676,257,876,208,108,900,678,912,830,541,369,572,996,543,
	783,984,620,215,364,954,353,893,838,464,888,672,671,453,393,130,927,672,103,268,849,597,298,792,
	373,028,395,452,767,031,129,100,333,696,063,046,099,180,328,138,782,391,367,566,104,347,713,165,
	495,897,021,159,454,503,241,952,055,937,183,814,515,589,264,894,586,591,501,363,147,676,413,662,
	843,302,502,175,075,791,426,238,440,513,015,405,476,007,476,498,747,783,201,892,106,205,584,698,
	383,524,005,031,036,187,539,925,202,274,453,467,202,350,823,213,372,999,023,061,199,920,256,689,
	198,899,908,817,944,610,695,281,886,646,630,824,678,765,305,845,231,339,408,011,870,948,795,735,
	488,385,897,157,930,791,657,525,540,518,959,449,984,465,130,248,721,166,519,809,265,271,872,913,
	736,358,591,494,923,276,213,116,461,018,047,328,995,621,925,367,809,697,847,697,726,183,327,599,
	265,650,527,446,129,800,629,718,921,404,375,627,930,737,500,435,684,546,352,140,119,118,622,625,
	161,732,119,556,975,036,023,320,412,126,344,181,833,754,571,377,867,747,583,783,758,174,317,957,
	011,000,027,824,913,530,257,131,124,993,626,863,404,596,480,086,028,834,672,069,335,493,603,141,
	485,087,204,213,357,254,720,762,673,897,857,837,928,958,409,382,883,536,405,344,396,217,119,883,
	289,266,162,616,394,049,286,804,626,796,372,654,015,917,535,645,430,198,053,751,867,174,961,912,
	991,147,525,380,624,081,763,689,015,391,680,510,756,697,550,659,469,557,112,900,507,657,356,152,
	843,089,480,485,079,285,160,832,736,274,980,123,243,426,924,630,558,985,552,020,642,912,534,528 
	(14.299 seconds elapsed.)
	
	Perfect number ( 9689 ) -> 
	 11,434,731,753,038,652,271,870,510,502,563,054,290,369,839,984,534,725,895,332,249,364,908,334,
	961,882,164,947,674,351,989,064,116,525,342,087,095,396,782,955,614,598,901,690,359,527,368,200,
	306,791,037,330,859,857,972,857,435,008,419,908,682,920,845,277,220,892,386,034,162,964,072,635,
	709,694,931,769,479,876,248,750,202,202,966,413,347,062,605,501,560,591,838,954,155,776,739,969,
	243,412,686,516,039,219,207,531,547,575,533,505,784,997,468,578,047,154,815,673,455,144,291,529,
	551,460,592,270,962,534,531,406,165,620,944,440,834,496,909,183,933,479,177,056,134,394,989,991,
	079,872,495,003,112,497,387,572,982,253,655,871,642,841,276,259,997,777,969,281,650,961,184,963,
	681,165,156,135,030,716,133,286,358,236,790,904,294,805,085,996,539,450,440,397,259,321,779,367,
	404,437,324,097,409,473,827,763,050,662,988,434,475,431,439,487,893,781,464,232,206,686,643,397,
	789,899,506,730,271,620,505,444,721,680,758,712,995,051,366,001,609,878,486,401,756,427,622,203,
	061,515,536,013,038,628,113,933,285,137,794,681,656,964,917,604,398,533,820,705,074,441,564,282,
	611,795,522,268,562,186,704,703,666,450,026,589,020,021,088,118,208,856,495,629,918,319,917,323,
	246,502,646,278,589,671,096,849,425,171,744,978,412,686,617,422,702,072,318,303,876,067,532,120,
	552,307,086,861,404,163,620,773,329,817,538,718,438,960,094,624,691,381,751,716,824,755,508,230,
	593,661,091,142,583,022,460,070,488,652,758,870,749,893,562,067,416,666,683,134,710,937,562,255,
	888,939,283,852,449,848,883,083,949,426,685,416,747,561,615,736,871,070,322,397,677,554,824,168,
	698,122,415,887,624,044,491,081,523,702,163,186,214,860,670,963,974,843,434,990,150,580,336,061,
	361,128,446,317,947,836,395,002,812,389,227,258,535,979,589,116,682,994,095,790,818,840,141,392,
	100,002,121,484,746,263,398,298,269,011,568,647,849,919,325,130,179,957,764,082,742,812,086,707,
	435,289,888,867,996,546,182,996,334,309,106,553,241,262,702,950,865,875,890,258,826,346,579,702,
	381,381,532,554,959,190,921,932,580,283,034,694,452,612,563,595,237,410,148,597,510,276,295,301,
	661,021,465,685,367,517,269,929,486,554,251,331,056,986,921,264,847,284,801,220,356,787,886,271,
	451,144,575,296,681,731,210,806,262,017,773,614,658,565,355,556,304,203,525,721,218,368,092,716,
	803,784,696,369,604,175,605,428,669,596,483,152,723,251,207,753,030,716,796,392,719,600,906,670,
	836,303,595,493,470,714,193,198,199,178,512,164,466,800,911,266,395,980,327,226,741,775,067,834,
	142,804,538,996,505,567,385,849,212,224,049,038,933,494,413,385,316,694,249,093,117,679,932,317,
	175,631,713,976,414,497,786,785,387,930,339,300,514,992,922,213,670,421,059,098,550,054,655,566,
	738,564,333,812,948,431,411,916,586,171,122,495,203,548,154,239,947,807,358,729,100,981,341,449,
	364,010,936,920,913,641,239,353,666,202,161,372,565,303,868,912,597,733,470,916,773,974,659,066,
	920,874,581,905,740,253,737,958,111,365,707,416,415,231,569,912,388,895,514,146,043,465,350,761,
	210,218,323,219,258,114,752,999,284,649,256,433,615,427,727,357,746,247,521,167,973,626,920,033,
	206,422,419,756,880,299,734,859,922,106,610,249,531,345,645,354,898,619,984,932,287,573,732,778,
	253,405,930,614,511,563,461,083,563,246,421,004,359,764,227,776,138,493,737,491,924,858,971,325,
	462,356,870,894,436,832,415,652,563,472,219,886,604,579,549,816,794,943,137,016,560,220,374,336,
	411,461,772,411,702,666,554,424,421,193,101,769,766,866,425,031,904,228,432,899,084,328,109,382,
	386,033,140,878,217,618,407,448,151,385,536,306,356,457,975,091,999,005,435,176,331,707,792,550,
	355,847,678,919,185,649,003,980,612,844,127,464,953,441,948,908,653,658,626,757,079,065,602,042,
	234,831,459,018,617,928,015,340,713,579,893,643,269,926,553,210,324,578,896,472,679,579,143,057,
	499,255,651,721,081,978,203,990,842,068,950,170,363,945,528,154,181,566,893,322,027,199,540,013,
	868,476,424,101,983,764,560,669,826,897,372,110,032,444,263,049,853,473,999,581,274,393,509,429,
	702,030,074,534,259,774,441,912,514,321,429,954,486,641,764,862,389,912,165,634,753,298,503,496,
	987,274,297,021,603,826,373,855,299,489,665,332,980,045,626,042,070,395,302,489,206,897,376,828,
	872,831,681,309,460,233,198,673,717,948,526,193,173,815,998,486,243,236,940,990,054,151,299,552,
	963,671,083,743,133,131,320,086,142,491,994,920,076,339,753,542,242,262,159,093,060,008,717,407,
	830,801,449,149,246,407,429,054,060,057,869,231,925,190,215,381,637,354,397,581,702,813,299,581,
	595,268,958,331,206,116,587,059,631,052,398,444,368,230,084,487,200,750,858,802,408,028,362,493,
	080,958,863,203,350,540,104,302,885,439,820,929,652,846,810,822,012,268,159,368,936,948,783,149,
	742,490,267,564,849,458,269,875,764,387,284,022,479,018,545,533,708,000,475,094,136,029,739,980,
	611,391,149,404,998,948,850,020,574,720,276,367,581,532,096,367,245,450,111,438,861,314,016,502,
	251,771,626,619,770,617,482,196,040,684,241,051,229,719,638,955,848,258,711,601,449,230,431,864,
	642,738,016,264,616,230,947,661,977,546,921,165,614,303,336,920,594,873,047,129,309,514,963,615,
	057,037,955,588,709,850,041,079,865,923,722,198,085,036,156,637,475,793,278,800,587,341,968,483,
	510,391,600,602,017,902,571,012,696,459,982,918,204,357,935,377,381,473,615,091,532,577,811,728,
	590,623,970,443,827,786,656,457,202,024,947,738,949,491,050,434,479,640,309,061,643,647,354,339,
	446,987,086,176,829,031,794,081,709,808,641,497,939,028,951,694,979,450,772,527,950,272,653,789,
	549,189,971,594,471,857,296,136,989,363,428,018,479,885,550,817,503,819,909,144,866,009,873,515,
	648,871,527,470,089,667,117,218,970,465,504,135,840,326,783,375,492,476,724,744,637,849,602,929,
	995,407,405,307,200,026,828,342,697,248,300,093,649,018,698,176,608,493,732,874,265,392,514,404,
	262,371,752,333,888,107,561,805,388,511,227,497,667,587,557,858,216,793,416,669,121,295,999,876,
	380,041,411,848,421,443,009,409,598,069,284,795,805,315,649,519,636,349,094,626,799,058,059,942,
	233,564,734,694,322,979,510,381,089,501,783,149,257,954,775,477,023,435,267,078,094,581,178,106,
	163,061,749,099,650,274,125,909,364,625,366,872,670,455,272,038,421,461,889,905,163,683,639,604,
	619,158,296,889,325,942,133,250,572,297,473,026,399,636,420,841,343,337,282,032,910,249,489,036,
	914,866,216,766,306,242,746,086,617,160,783,603,260,669,828,666,764,435,495,974,703,619,964,536,
	047,254,724,730,591,094,280,669,421,719,280,473,782,354,957,913,365,214,181,469,812,017,021,835,
	874,595,030,465,977,503,896,553,607,168,170,561,453,978,564,245,013,410,219,025,191,747,460,561,
	722,957,552,496,171,653,955,970,861,351,116,645,053,443,355,424,088,047,260,644,609,728,255,333,
	649,840,992,771,523,160,167,508,544,037,518,309,121,889,943,427,982,452,859,468,270,570,716,001,
	999,480,469,941,211,598,166,013,334,561,097,000,740,254,837,141,359,183,281,132,981,187,173,003,
	018,007,907,909,084,911,534,754,016,624,659,280,687,015,006,765,916,504,752,568,366,296,745,566,
	161,382,550,432,878,374,711,432,860,784,006,448,579,385,752,658,478,330,108,911,715,416,587,381,
	980,042,411,441,736,147,879,033,756,959,899,559,967,278,828,335,729,354,948,891,349,957,093,813,
	441,062,886,451,717,319,282,051,073,285,430,699,786,813,324,786,910,033,950,981,485,068,506,291,
	236,103,005,510,413,799,745,737,938,771,620,843,753,527,896,693,275,958,193,843,005,217,248,433,
	029,017,905,892,371,468,821,164,355,559,298,391,566,587,285,882,803,155,556,329,668,836,395,442,
	377,139,281,823,916,767,305,350,368,312,012,320,720,545,103,679,686,695,403,688,633,102,445,850,
	860,912,200,011,106,419,036,420,168,218,686,675,505,880,007,154,586,289,426,045,638,467,535,055,
	657,733,195,385,749,567,833,117,323,728,527,949,370,364,538,683,091,253,891,942,661,535,063,266,
	940,844,527,310,380,742,163,037,454,132,151,629,920,196,049,269,431,333,414,952,710,111,030,436,
	049,223,732,010,382,065,130,643,059,659,584,756,326,701,909,820,785,002,538,974,738,852,620,988,
	773,021,343,666,913,185,983,024,145,754,783,451,177,014,049,057,728,513,234,967,982,558,429,577,
	216 (144.575 seconds elapsed.)
Valid HTML 3.0