This program finds those 5-digit squares which use only the digits 1 through 5, as the sum of the integers 1 through 5 is 15, which is precisely the number of digits needed for three 5-digit numbers.
CLS
FOR n = 100 TO 316
nsq = n * n
s$ = LTRIM$(STR$(nsq))
good = 1
FOR i = 1 TO 5
IF MID$(s$, i, 1) > "5" OR MID$(s$, i, 1) < "1" THEN good = 0
NEXT
IF good THEN PRINT n, nsq
NEXT
The 5-digit squares appear to the right of their square roots:
111 12321
112 12544
115 13225
182 33124
185 34225
188 35344
211 44521
229 52441
235 55225
Making the program go farther (with the hindsight that there are only a manageable nine such squares):
CLS
FOR n = 100 TO 316
nsq = n * n
s$ = LTRIM$(STR$(nsq))
good = 1
FOR i = 1 TO 5
IF MID$(s$, i, 1) > "5" OR MID$(s$, i, 1) < "1" THEN good = 0
NEXT
IF good THEN PRINT n, nsq: ct = ct + 1: sq$(ct) = LTRIM$(STR$(nsq))
NEXT
PRINT
FOR a = 1 TO ct - 2
as$ = sq$(a)
FOR b = a + 1 TO ct - 1
bs$ = sq$(b)
FOR c = b + 1 TO ct
good = 1
cs$ = sq$(c)
IF LEFT$(as$, 1) = LEFT$(bs$, 1) OR LEFT$(as$, 1) = LEFT$(cs$, 1) OR LEFT$(bs$, 1) = LEFT$(cs$, 1) THEN good = 0
IF RIGHT$(as$, 1) = RIGHT$(bs$, 1) OR RIGHT$(as$, 1) = RIGHT$(cs$, 1) OR RIGHT$(bs$, 1) = RIGHT$(cs$, 1) THEN good = 0
REDIM dct(5)
FOR i = 1 TO 15
dused = VAL(MID$(as$ + bs$ + cs$, i, 1))
dct(dused) = dct(dused) + 1
NEXT
FOR i = 1 TO 4
FOR j = i + 1 TO 5
IF dct(i) = dct(j) THEN good = 0
NEXT
NEXT
IF good THEN PRINT as$: PRINT bs$: PRINT cs$: PRINT
NEXT
NEXT
NEXT
adds to the output the candidate sets of three squares based on non-repeated first digits and non-repeated last digits, as well as having a different number of each digit:
12544
34225
44521
12544
34225
52441
35344
44521
55225
Only in the last of these, seen by inspection, do three of the digits appear their own number of times: one 1, four 4's and five 5's.
|
Posted by Charlie
on 2011-03-29 15:44:16 |