Перестановка цифр числа с использованием модульного деления
Моя домашняя работа состоит в том, чтобы найти "числа эмирп" (пары простых чисел, таких как 13 ⇆ 31) до 10000. Я могу поменять цифры, используя [::-1]
, но я должен сделать это с %
вместо.
Вот мой код Это работает, но как я могу изменить цифры, используя %
вместо [::-1]
?
counter=0;
prime_counter=0;
emirp_counter=0;
for N in range(13,9968):
i=2;
controlq=1;
while i < N/2+1 and controlq==1:
counter+=1;
if N % i == 0:
controlq=0;
i+=1;
if controlq==1:
x=int(str(N)[::-1]); # Here's the problem.
a=2;
controlw=1
while a < x/2+1 and controlw==1:
emirp_counter+=1
if x % a == 0:
controlw=0;
a+=1
if controlw==1 and (N!=x):
prime_counter+=1;
print(N,'<-- is an emirp number -->',x,);
print('TOTAL PRIME NUMBERS', prime_counter);
print('TOTAL PROCESS', emirp_counter+counter);
Я только начал изучать Python (и программирование) 1 месяц назад.
2 ответа
Изменить номер с помощью мода? из головы я получаю это
def reverse_number(n):
digit=[]
while n!=0:
n,d = divmod(n,10) # n//10 , n%10
digit.insert(0,d)
result=0
for i,d in enumerate(digit):
result += d*10**i
return result
так как n mod 10 дает мою последнюю цифру числа, то мне просто нужно сохранить ее, а затем выполнить деление числа на целое число на 10 и повторять до тех пор, пока мое число не станет равным нулю, Python позволяет мне делать оба одновременно с divmod
, наконец, сделайте новое обратное число, добавив к нему мощность 10 по мере необходимости.
>>> reverse_number(45682)
28654
Короткий ответ:
def reverse(x):
def reverse_int_(n, r):
return reverse_int_(n / 10, n % 10 + r * 10) if n else r
return reverse_int_(x, 0)
Там у вас есть ваш% оператор.