4 views (last 30 days)

Show older comments

%It give an integer x which contains d digits, find the value of n (n > 1) such that

%the last d digits of x^n is equal to x. Example x=2 so n=5 because 2^5=32 and last

%digits of 32 is 2

%So why this take infinity loop

function n = bigNumRepeat(x)

d = length(num2str(x))

y=2

n=2

while 1

y = y*x

y = num2str(y)

y = str2num(y(end - d + 1:end))

if y==x

break

end

n=n+1

end

end

John D'Errico
on 7 May 2021

Walter Roberson
on 8 May 2021

x = randi([11 99])

d = length(num2str(x))

y = x;

n = 1;

flag = true;

modulus = 10^d;

while flag && n <= 1000

n = n + 1;

y = mod(x*y,modulus);

flag = y ~= x;

end

if flag

fprintf('not found in 1000 iterations\n')

else

n

end

Note that x is not relatively prime with 10^d then there might not be a solution.

Walter Roberson
on 7 May 2021

Edited: Walter Roberson
on 7 May 2021

y=2

y = y*x

That does not give you x^n, it gives you 2 * x^n . You should initialize y = 1

See also https://www.mathworks.com/matlabcentral/fileexchange/932-big-x-y-modulo-function and see the symbolic powermod() function

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!