Penholodigital squares: Difference between revisions

no edit summary
(Added Perl)
No edit summary
Line 48:
;* [[oeis:A036744|OEIS:A036744 - Penholodigital squares in base 10]]
;* [[First_perfect_square_in_base_n_with_n_unique_digits|Related task: First perfect square in base n with n unique digits]]
 
=={{header|Delphi}}==
{{works with|Delphi|6.0}}
{{libheader|SysUtils,StdCtrls}}
 
 
<syntaxhighlight lang="Delphi">
{Library routine included here for clarity}
 
function GetRadixString(L: int64; Radix: Byte): string;
{Converts integer a string of any radix}
const RadixChars: array[0..35] Of char =
('0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
'G','H', 'I', 'J', 'K', 'L', 'M', 'N',
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'Y', 'Z');
var I: cardinal;
var S: string;
var Sign: string[1];
begin
Result:='';
If (L < 0) then
begin
Sign:='-';
L:=Abs(L);
end
else Sign:='';
S:='';
repeat
begin
I:=L mod Radix;
S:=RadixChars[I] + S;
L:=L div Radix;
end
until L = 0;
Result:=Sign + S;
end;
 
 
 
function IsPenholoSquare(N: int64; Radix: byte): boolean;
{Test if N is a Penholodigital square}
var S: string;
var SL: TStringList;
var I: integer;
begin
Result:=False;
SL:=TStringList.Create;
try
{Get text version of number in the radix}
S:=GetRadixString(N,Radix);
{Reject any number with a zero in it}
if Pos('0',S)>0 then exit;
{Make sure string list doesn't duplicates}
SL.Sorted:=True;
SL.Duplicates:=dupIgnore;
{Insert each digit as one string in the list}
for I:=1 to Length(S) do SL.Add(S[I]);
{Same number of unique digits as radix-1? }
Result:=SL.Count=Radix-1;
finally SL.Free; end;
end;
 
 
function GetNDigitNumber(Digits,Radix: integer): extended;
{Get smallest N-digit number of specified radix}
begin
Result:=Power(10,(Digits-1) * Log(Radix));
end;
 
 
procedure GetStartStop(Radix: integer; var Start,Stop: int64);
{Start/Stop = Range of numbers to check}
{Since zero is not allowed, we want number width digits = Radix-1}
{Start/Stop squared = Smallest largest number that could match}
var S1,S2,Sqrt1,Sqrt2: extended;
begin
Start:=Trunc(Sqrt(GetNDigitNumber(Radix-1,Radix)));
Stop:=Trunc(Sqrt(GetNDigitNumber(Radix,Radix)-1));
end;
 
 
procedure FindAllPenholoSquares(Memo: TMemo; Radix: integer);
{Find all the Penholodigital squares for the specified radix}
var I,Start,Stop: int64;
var S,H: string;
var Cnt: integer;
begin
Cnt:=0;
{Get the range to look over}
GetStartStop(Radix,Start,Stop);
{Scan all the number for Penholodigital squares}
I:=Start;
while I<=Stop do
begin
if IsPenholoSquare(I*I,Radix) then
begin
Inc(Cnt);
S:=S+GetRadixString(I,Radix)+'² = '+GetRadixString(I*I,Radix);
if I<Stop then S:=S+' ';
If (Cnt mod 3)=0 then S:=S+CRLF;
end;
Inc(I);
end;
H:=CRLF+'Penholodigital squares in base '+IntToStr(Radix)+CRLF;
H:=H+'Start: '+GetRadixString(Start,Radix)+'² = '+GetRadixString(Start*Start,Radix)+CRLF;
H:=H+'Stop: '+GetRadixString(Stop,Radix)+'² = '+GetRadixString(Stop*Stop,Radix)+CRLF;
H:=H+'Count='+IntToStr(Cnt)+CRLF;
Memo.Lines.Add(H+S);
end;
 
 
procedure ShowPenholoSquares(Memo: TMemo);
{Show Penholodigital squares for various radices}
var N,C: int64;
begin
FindAllPenholoSquares(Memo,9);
FindAllPenholoSquares(Memo,10);
FindAllPenholoSquares(Memo,11);
FindAllPenholoSquares(Memo,12);
FindAllPenholoSquares(Memo,13);
FindAllPenholoSquares(Memo,14);
end;
 
 
</syntaxhighlight>
{{out}}
<pre>
 
Penholodigital squares in base 9
Start: 3000² = 10000000
Stop: 8888² = 88870001
Count=10
3825² = 16328547 3847² = 16523874 4617² = 23875614
4761² = 25487631 6561² = 47865231 6574² = 48162537
6844² = 53184267 7285² = 58624317 7821² = 68573241
8554² = 82314657
 
Penholodigital squares in base 10
Start: 10000² = 100000000
Stop: 31622² = 999950884
Count=30
11826² = 139854276 12363² = 152843769 12543² = 157326849
14676² = 215384976 15681² = 245893761 15963² = 254817369
18072² = 326597184 19023² = 361874529 19377² = 375468129
19569² = 382945761 19629² = 385297641 20316² = 412739856
22887² = 523814769 23019² = 529874361 23178² = 537219684
23439² = 549386721 24237² = 587432169 24276² = 589324176
24441² = 597362481 24807² = 615387249 25059² = 627953481
25572² = 653927184 25941² = 672935481 26409² = 697435281
26733² = 714653289 27129² = 735982641 27273² = 743816529
29034² = 842973156 29106² = 847159236 30384² = 923187456
 
 
Penholodigital squares in base 11
Start: 33534² = AAAA63735
Stop: AAAAA² = AAAA900001
Count=20
42045² = 165742A893 43152² = 173A652894 44926² = 18792A6453
47149² = 1A67395824 47257² = 1A76392485 52071² = 249A758631
54457² = 2719634A85 55979² = 286A795314 59597² = 314672A895
632A4² = 3671A89245 64069² = 376198A254 68335² = 41697528A3
71485² = 46928A7153 81196² = 5A79286413 83608² = 632A741859
86074² = 6713498A25 89468² = 7148563A29 91429² = 76315982A4
93319² = 795186A234 A3A39² = 983251A764
 
Penholodigital squares in base 12
Start: 100000² = 10000000000
Stop: 3569B7² = BBBBB983821
Count=23
117789² = 135B7482A69 16357B² = 23A5B976481 16762B² = 24AB5379861
16906B² = 25386749BA1 173434² = 26B859A3714 178278² = 2835BA17694
1A1993² = 34A8125B769 1A3595² = 354A279B681 1B0451² = 3824B7569A1
1B7545² = 3A5B2487961 2084A9² = 42A1583B769 235273² = 5287BA13469
2528B5² = 5B23A879641 25B564² = 62937B5A814 262174² = 63A8527B194
285A44² = 73B615A8294 29A977² = 7B9284A5361 2A7617² = 83AB5479261
2B0144² = 8617B35A294 307381² = 93825A67B41 310828² = 96528AB7314
319488² = 9AB65823714 319A37² = 9B2573468A1
 
Penholodigital squares in base 13
Start: 37B451² = CCCCC61C7A1
Stop: CCCCCC² = CCCCCB000001
Count=0
 
 
Penholodigital squares in base 14
Start: 1000000² = 1000000000000
Stop: 3A55171² = DDDDDD67CDA01
Count=160
1129535² = 126A84D79C53B 1145393² = 12A68DB5374C9 117D854² = 134596CAB87D2
11865A8² = 1356BC247D9A8 11888A3² = 135BAD2678C49 1213ACA² = 146CA78D53B92
1225AA9² = 149785AC62D3B 1235DC3² = 14BC765DA8329 1279052² = 157AB3D289C64
12894A5² = 15A29D468C73B 128B953² = 15A8364DC7B29 12B30AC² = 1623D89B7A5C4
12D71B4² = 167B48ACD3952 13485D5² = 1763D8CA9245B 136C494² = 17BD495AC8632
138BC89² = 182C6D7534A9B 1393B93² = 183D645B72AC9 13A0084² = 185B36D7A4C92
1461C78² = 1A3D7C6925B48 1470999² = 1A6548739C2DB 149AA14² = 1AD8546C37B92
1508CA3² = 1BCA2D5736849 151DB35² = 1C25A647D893B 152649C² = 1C398AD765B24
1576CAB² = 1D38AB65C7249 157C257² = 1D4965C8BA237 15809D3² = 1D527B3A6C489
1586757² = 1D64BA5C89237 16D1B9B² = 23457BCD861A9 180D3D1² = 26ADB397548C1
183B736² = 2761354D9CBA8 1877349² = 283CAD946157B 190AA09² = 29D738461AC5B
193AAA9² = 2A9657C148D3B 19910D6² = 2BD357619AC48 19A4195² = 2C35164A98D7B
1A1030B² = 2D56B71C34A89 1A18B62² = 2D785C3691BA4 1B11831² = 32CDA84759B61
1B84906² = 34B17956CDA28 1B909D9² = 34DA578296C1B 1BBB53A² = 359C84AD761B2
1C0C851² = 3674BC2598DA1 1C21091² = 36BA29D587C41 1C25991² = 36CD78A95B241
1C9891C² = 38C2A5DB71964 1CA7D36² = 391B6C2475DA8 1CC1274² = 3978B56A4CD12
1D034D5² = 3A1CD2476985B 1D18196² = 3A716D45B92C8 1D53476² = 3B74AC96D1528
1D82B89² = 3C4DA1285769B 1D891AA² = 3C6A79415D8B2 1D9C33B² = 3CB8216D57A49
1DD841C² = 3DC529A78B164 205B2B8² = 41952D3A67BC8 206B1C7² = 41D5BA69C8237
208A775² = 427589D63AC1B 20D0164² = 43AC6DB981572 216BBBA² = 46185C9ADB732
217972B² = 46518B2C3D7A9 21842D9² = 467A53289DC1B 21B1038² = 4756D93B12CA8
21BD039² = 47921586CAD3B 22188B7² = 48AD25C19B637 2220ADA² = 48CB93D567A12
22228DA² = 48D593BA76C12 2257406² = 49DB5A71C3628 226D835² = 4A619C8D5273B
227211B² = 4A6C7D1385B29 22835B8² = 4AB96D12753C8 22CB813² = 4C3B528DA1769
2304629² = 4CA59718362DB 2402131² = 5329784CDAB61 24080CD² = 5348C7A6B9D21
24141A4² = 537CD86A941B2 244C9D8² = 54A7B93CD1628 249A12B² = 564CBD78321A9
24DD54B² = 57AB12834D6C9 255AD7A² = 59A6148D3CB72 255C168² = 59AB746D1C328
256AD5B² = 5A12D34C78B69 2576D8B² = 5A48C673B1D29 2586549² = 5A9328C641D7B
2588178² = 5A9B6C21D7348 259CCB1² = 5B23CA79D4681 25C895B² = 5C1438ADB2769
25CB949² = 5C24A986D317B 25D251B² = 5C3D784AB6129 261D43A² = 5D36C7418A9B2
26280BA² = 5D6789AC41B32 262BA53² = 5D7B861CA4329 2634B3A² = 5DA41C73689B2
267941A² = 61374A895BCD2 270A8B1² = 63AB275D49C81 276CC76² = 65DBC7A914328
27A7D0D² = 67458DB39A2C1 27D30D1² = 683DB5A9742C1 2810A05² = 68D5A943C721B
2811842² = 68DA3C95B1724 2837D42² = 69C5B1738AD24 2859D11² = 6A975BC843D21
296B7C5² = 7254638A1DC9B 29D7768² = 74D6CA935B128 2AA5C1C² = 793185C2DAB64
2AD13CB² = 7A3D28B14C569 2B20281² = 7B63459CA8D21 2B21C1A² = 7B6CA139854D2
2B5A308² = 7CD13AB529648 2C40134² = 83CD916A574B2 2CB5679² = 86DA721493C5B
2D26547² = 8915B2ADC4637 2D740A3² = 8B1D75A2C3649 2DA0095² = 8C415DA92637B
30BB095² = 95162DCA8437B 30C0C0C² = 95317BC2D68A4 30D632C² = 95B83DC167A24
30D6D04² = 95BC8347AD612 3150917² = 9841B5A6CD237 3191C1C² = 9A175D382CB64
3193C92² = 9A261B73CD584 31C0878² = 9B5A1726CD348 3206366² = 9C6B3D2A51748
3276C18² = A195234DB7C68 32781B7² = A19D2CB854637 3307D3A² = A4C918563D7B2
33867CD² = A87B49365CD21 33A00DA² = A93B857C4D612 33A3BD9² = A95847C2D361B
340A621² = AB6C8D5793241 3441C78² = AD139726C5B48 34B4836² = B27146DC359A8
35A38CB² = B8A5D174C2369 35B0232² = B917A2856D3C4 35D5841² = BA3C52D796481
35DDC8B² = BA7D48361C529 363A5CD² = BC5A68D479321 369A308² = C152B73DA9648
36C9531² = C2B9A43D87561 36D9588² = C349B5721AD68 373627B² = C5321A47BD689
3736C8D² = C53729468BDA1 37574A3² = C63B78A1D5249 3759087² = C64981ABD5237
37861A4² = C7A5D493861B2 37CB72A² = C9D84AB316752 381827A² = CB548A369D172
38534A6² = CD37B496512A8 3859842² = CD6AB81395724 38AA3D5² = D21396874AC5B
38BA9A1² = D28A3B549C761 3900B4C² = D3B5C9612A784 390A926² = D42795B36A1C8
39407D3² = D5C742BA31689 394C2D9² = D64895A723C1B 397025D² = D764AB895C321
39A1835² = D912C45A6873B 39B0934² = D981746A53CB2 39C021C² = DA135B28C7964
3A03226² = DB3962A7541C8
Elapsed Time: 03:03.390 min
 
</pre>
 
 
 
465

edits