How to resolve the algorithm First perfect square in base n with n unique digits step by step in the Ring programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm First perfect square in base n with n unique digits step by step in the Ring programming language

Table of Contents

Problem Statement

Find the first perfect square in a given base N that has at least N digits and exactly N significant unique digits when expressed in base N. E.G. In base 10, the first perfect square with at least 10 unique digits is 1026753849 (32043²). You may use analytical methods to reduce the search space, but the code must do a search. Do not use magic numbers or just feed the code the answer to verify it is correct.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm First perfect square in base n with n unique digits step by step in the Ring programming language

Source code in the ring programming language

basePlus = []
decList = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
baseList = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]

see "working..." + nl

for base = 2 to 10
for n = 1 to 40000 
    basePlus = []
    nrPow = pow(n,2)
    str = decimaltobase(nrPow,base)
    ln = len(str)
    for m = 1 to ln
        nr = str[m]
        ind = find(baseList,nr)
        num = decList[ind]
        add(basePlus,num)
    next
    flag = 1
    basePlus = sort(basePlus)
    if len(basePlus) = base
       for p = 1 to base
           if basePlus[p] = p-1
              flag = 1
           else
              flag = 0
              exit
           ok 
       next
       if flag = 1
          see "in base: " + base + " root: " + n + " square: " + nrPow + " perfect square: " + str + nl
          exit
       ok
     ok        
next
next
see "done..." + nl

func decimaltobase(nr,base)
     binList = [] 
     binary = 0
     remainder = 1
     while(nr != 0)
          remainder = nr % base
          ind = find(decList,remainder)
          rem = baseList[ind]
          add(binList,rem)
          nr = floor(nr/base) 
     end
     binlist = reverse(binList)
     binList = list2str(binList)
     binList = substr(binList,nl,"")  
     return binList

  

You may also check:How to resolve the algorithm Super-d numbers step by step in the F# programming language
You may also check:How to resolve the algorithm Hello world/Text step by step in the WDTE programming language
You may also check:How to resolve the algorithm Doubly-linked list/Definition step by step in the E programming language
You may also check:How to resolve the algorithm Flatten a list step by step in the RPL programming language
You may also check:How to resolve the algorithm Sieve of Pritchard step by step in the J programming language