Перестановка цифр числа с использованием модульного деления

Моя домашняя работа состоит в том, чтобы найти "числа эмирп" (пары простых чисел, таких как 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)

Там у вас есть ваш% оператор.

Другие вопросы по тегам