loop: stop if value repeats
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Niklas Kurz
el 21 de En. de 2021
Respondida: Jan
el 24 de En. de 2021
In my case this is based on
N = Number
G = Guess
x = 1:N
R= mod(G^x,N)
if R repeats I want the calculation mod(G^x,N) to stop and tell me the steps P that it needed to to get to R again
for example if R = 1, 4 3, 2, 1 -stop, P = 4
2 comentarios
Respuesta aceptada
Jan
el 24 de En. de 2021
N = Number;
G = Guess;
x = 1:N;
R = nan(1, N);
found = N;
for k = 1:N
R(k) = mod(G^x(k), N);
if any(R(1:k-1) == R(k))
found = k;
break
end
end
R = R(1:found)
0 comentarios
Más respuestas (1)
Bob Thompson
el 21 de En. de 2021
I'm assuming you have all four of these commands within some kind of loop. Without the loop I have not tested what I'm going to suggest adding.
To do what you're asking you need to record all the values of R, this can be done by indexing R. If you aren't running an integer for loop, starting at 1, then you'll need to add a counter for each time you loop.
Then you just need an if check to determine if the loop needs to be broken.
N = Number
G = Guess
x = 1:N
R(count) = mod(G^x,N)
if sum(R==R(count))>1
P = length(R)-1;
break
end
end
3 comentarios
Bob Thompson
el 22 de En. de 2021
Mmm, I see where you're getting the multiple values for R from now.
I'm not sure why you want to stop the 'loop' if you don't actually have one. Do you just want the first index of R which contains a duplicate?
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!