Leudassdf Posted March 4, 2020 at 10:27 PM Report Share #617483 Posted March 4, 2020 at 10:27 PM Boa noite amigos, Tenho uma função que lida com números longos em python2. Pelo que li em python3 os números longos foram unificados e a função long deixou de existir e o L no final dos números deixou de ser necessário. Portanto eu fiz as alterações que me pareciam corretas mas o resultado que obtenho em python3 é um erro enquanto que em python2 é um número válido. Deixo as versões em python2 e em python3... Espero que alguém me consiga ajudar na identificação e resolução do problema. Pelos testes que fiz o meu v3 * 0.0 dá erro. Se for v3 * 0 já dá OK em python3. Não estou a conseguir perceber como fazer para em python3 produzir os mesmos resultados. Grato a quem me puder ajudar Python2 def inverse(u, v): """inverse(u:long, u:long):long Return the inverse of u mod v. """ u3, v3 = u, v u1, v1 = 1L, 0L while v3 > 0: q=u3 / v3 u1, v1 = v1, u1 - v1*q u3, v3 = v3, u3 - v3*q while u1<0: u1 = u1 + v return u1 v3 = 16328632084933010002384055033805457329601614771185955389739167309086214800406465799038583663495375294167564556218249812075026498049238137557936767564877129380031037096474576701424363585184425538239734829952673040443267770476629574802693913227893783846194285964464469846943061687644767462460965622580087564339212631775817895958409016676398975671266179637898557687317076217721884323315069515788106125705301913307854592898356222139631316962247550981844266104701843862648069010239662367183672047107559358990137503061077380023641379174265957374038711141877508504346564731250609196846638183903982387884578266136503697493474682071 print(inverse(1, v3)) #retorna 1 Python3 def inverse(u, v): """inverse(u:long, u:long):long Return the inverse of u mod v. """ u3, v3 = u, v u1, v1 = 1, 0 while v3 > 0: q=u3 / v3 u1, v1 = v1, u1 - v1*q u3, v3 = v3, u3 - v3*q while u1<0: u1 = u1 + v return u1 v3 = 16328632084933010002384055033805457329601614771185955389739167309086214800406465799038583663495375294167564556218249812075026498049238137557936767564877129380031037096474576701424363585184425538239734829952673040443267770476629574802693913227893783846194285964464469846943061687644767462460965622580087564339212631775817895958409016676398975671266179637898557687317076217721884323315069515788106125705301913307854592898356222139631316962247550981844266104701843862648069010239662367183672047107559358990137503061077380023641379174265957374038711141877508504346564731250609196846638183903982387884578266136503697493474682071 print(inverse(1, v3)) #Despoleta o seguinte erro: int to large to convert to float. Link to comment Share on other sites More sharing options...
Leudassdf Posted March 5, 2020 at 12:14 AM Author Report Share #617486 Posted March 5, 2020 at 12:14 AM Depois de analisar melhor o código percebi que em python2 se ambos os argumentos da função forem do tipo inteiro o operador de divisão / faz a divisão inteira. Este operador em python3 faz sempre a divisão "normal". A solução passou por fazer u3 // v3 ao invés de u3 / v3 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now