Felicidad inconformista (25 puntos) Python

La felicidad inconformista (25 puntos)
hace una suma cuadrada de los dígitos de un número decimal, lo que se llama iteración. Si un número decimal puede obtener 1 a través de varias iteraciones, se le llama número feliz. 1 es un número feliz. Además, por ejemplo, 19 obtiene 82 después de 1 iteración, 68 después de 2 iteraciones, 100 después de 3 iteraciones y 1 al final. Entonces 19 es el número de felicidad. Obviamente, los números pasados ​​durante la iteración de un número de felicidad a 1 son todos números de felicidad, y su felicidad depende del número inicial. Por ejemplo, la felicidad de 82, 68 y 100 depende de 19. Y un número de felicidad inconformista no depende de ningún otro número dentro de un intervalo limitado; su independencia es el número de números de felicidad que se le atribuyen. Si este número sigue siendo un número primo, su independencia se duplica. Por ejemplo, 19 es un número de felicidad inconformista en el intervalo [1, 100], y su independencia es 2 × 4 = 8.
Por otro lado, si un número mayor que 1 entra en un ciclo sin fin después de varias iteraciones, entonces el número no es feliz. Por ejemplo, 29 iteraciones obtienen 85, 89, 145, 42, 20, 4, 16, 37, 58, 89, ... Se puede ver que 89 a 58 forman un bucle sin fin, por lo que 29 no es feliz.

Esta pregunta requiere que escriba un programa para enumerar todos los números de felicidad inconformistas y su independencia en un intervalo dado.

Ejemplo de entrada 1:

10 40
Ejemplo de salida 1:

19 8 23 6 28 3 31 4 32 3

Código aceptado y comentarios:

l,r=input().split()
l,r=int(l),int(r)
list,ans,child=[],[],{
    
    } #list存所有的幸福树;ans存独立的幸福树,即不依赖于区间内的其他数字;child存区间内依赖该幸福数(key)的幸福数的个数(value)
for num in range(l,r+1):#枚举区间所有数字
    sum = 0
    tnum = num
    vis={
    
    }
    while sum!=1 or vis[sum]<2:
        sum = 0
        for digit in str(tnum):#对一个十进制的各位数字做一次平方和
            sum += int(digit)**2
        vis.setdefault(sum,0)#字典初始化
        vis[sum]+=1 #一次迭代结束 该数字在迭代过程中出现次数+1 
        if(vis[sum]==2):#该数字在迭代过程中出现次数==2 即首次出现死循环 当前枚举的数字num是不幸福数
            break
        tnum = sum
    if(sum==1):#数字num是幸福数 若干次迭代结束时平方和sum==1
        ans.append(num)#存进幸福数数组
        tnum = num
        sum = 0
        child.setdefault(num,0) #计算这个幸福数的独立性 即数依赖于这个数num的幸福数的个数
        while(sum!=1):
            sum = 0
            for digit in str(tnum):
                sum += int(digit) ** 2
            list.append(sum) #对幸福数迭代 迭代过程中出现的数都是幸福数 全部加进list中 但对num进行迭代 幸福数num本身没有进入list,即如果一个幸福数是独立的,在有限区间[l,r]内不依附于其他数字,则不会出现在list中
            tnum = sum
            child[num]+=1 #依赖于幸福数num的幸福数的个数+1 
        #一个幸福数num的child值为num迭代到1的过程中产生的全部sum值的个数 因为迭代到1就结束循环 过程显然是没有产生重复sum值的

import math

def isPrime(n):
    if n <= 1:
        return False
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True

for item in ans:
    if item not in list:#出现在list中的幸福数都是其他幸福数迭代过程中产生的
        if isPrime(item):
            child[item]*=2
        print(item,child[item])

if(len(ans)==0):
    print("SAD")

El método de Python para juzgar números primos

import math

def isPrime(n):
    if n <= 1:
        return False
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True

Supongo que te gusta

Origin blog.csdn.net/weixin_56336619/article/details/115211676
Recomendado
Clasificación