2015-12-15 5 views
-3

Mon devoir est de trouver les "nombres d'émirs" (paires de nombres premiers comme 13 ⇆ 31) jusqu'à 10.000. Je peux inverser les chiffres en utilisant [::-1], mais je dois le faire avec % à la place.Inverser les chiffres d'un nombre en utilisant la division modulaire

Voici mon code. Cela fonctionne, mais comment puis-je inverser les chiffres en utilisant % au lieu de [::-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); 

Je viens de commencer à apprendre Python (et programmation) il y a 1 mois.

+1

Bienvenue dans StackOverflow! Vous avez plus de chances d'obtenir des résultats utiles si vous utilisez la ponctuation/majuscule dans votre question. À l'heure actuelle, il est beaucoup plus difficile d'analyser votre question que d'analyser votre code. –

+0

Et où est votre vraie question? – Julien

+0

StackOverflow n'est pas un site d'aide aux devoirs. Veuillez lire la page [how to ask] (http://stackoverflow.com/help/how-to-ask) pour apprendre à écrire une bonne question! – Nanos

Répondre

1

inverser un nombre en utilisant mod? du haut de ma tête, je reçois ce

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 

car n mod 10 indiquant le dernier chiffre du numéro, je dois juste l'enregistrer puis faire une division interger du nombre de 10, et répétez jusqu'à ce que mon numéro soit zéro, Python laisse mon faire les deux en même temps avec divmod, enfin un make le nouveau nombre inversé en ajoutant la puissance de 10 au besoin.

>>> reverse_number(45682) 
28654 
0

Réponse courte:

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) 

Là, vous avez votre opérateur%.