Python运维开发 第10周
目录
反素数
描述
反素数(逆向拼写的素数)是指一个将其逆向拼写后也是一个素数的非回文数。例如:13和31都是素数,且13和31都不是回文数,所以,13和31是反素数。 输入一个正整数 n , 请输出从小到大排列的的前n个反素数,数字后面以一个空格进行分隔。
输入格式
输入一个正整数
输出格式
符合条件的反素数
输入输出示例
代码
def prime(n): if n <= 1: #小于2的数字单独处理 return 0 for i in range(2,int(n**(1/2)+1)): #根据素数定义判定是否是素数,是素数返回1 if n % i == 0: return 0 return 1 if __name__ == "__main__": n = int(input()) i = 2 count = 0 while True: if prime(i) and prime(int(str(i)[::-1])) and str(i) != str(i)[::-1]: #如果是反素数 print(i,end = ' ') #数字间空格分隔 count = count + 1 if count == n: break i = i+ 1
侯先生爬楼梯
描述
侯先生每天都会爬楼梯锻炼身体,他有时候一次上跨一级,有时候一次上跨两级...有一天侯先生想弄明白一个很难的问题:从最下面的第1级开始到顶端的第n级一共有多少种走法呢?比如n是3时,有两种走法(或者直接从第1级上跨两步到第3级,或者从第1级跨一步到2级再跨一步到第3级)。
请你帮帮侯先生,给你n(1<n<40)的值,你帮忙计算并输出有多少种爬到顶端的方法。
输入格式
输入n的值,n是1到40之间的整数。
输出格式
输出一共有多少种从第1级台阶到第n级台阶的走法。
代码
参考代码: n=eval(input()) li=[0]*n if n==2: print(1) elif n==3: print(2) else: li[n-1]=1 li[n-2]=2 for i in range(n-3,0,-1): li[i]=li[i+1]+li[i+2] print(li[1]) #或者使用递归来实现: def upstrs(n): if n==2: return 1 elif n==3: return 2 else: return upstrs(n-1)+upstrs(n-2) n=eval(input()) li=[0]*n print(upstrs(n))
计算ID号
描述
我的微信ID是大写字母WHUT后面的数字是两个素数连在一起,大的在前,小的在后,如果我告诉你两数的乘积是多少,你能计算出我的ID号吗?
如果输入一个[0-9]之间的数字,你能统计出从1开始到我ID中的数字的序列里,一共出现多少次这个数字吗?
输入格式
第一行输入ID中两个素数的乘积
第二行输入一个[0-9]之间的数字
输出格式
第一行输出ID号
第二行输出数字的次数
输入输出示例
输入 输出 示例 1 196409 3 WHUT997197 599140
代码
def isPrime(n): # 判断参数 n 是否为素数的函数 if n < 2: # 小于2的数字都不是素数 return False for i in range(2, int(n ** 0.5) + 1): # 根据素数定义判定是否是素数,是素数返回1 if n % i == 0: # 从 2到n-1中如果存在一个数是i,使n 可以整除i,则n不是素数 return False else: # 若for循环未遇到return正常结束,则n是素数 return True def checkId(n): if n % 2 == 0 and isPrime(n // 2): # 如果n能被2整除,单独处理,提高效率 return int(str(n // 2) + str(2)) else: for num in range(3,n//2+1,2): # 如果n不能被2整除,则两个素数不包括2,都是奇数 if isPrime(num) and n % num == 0 and isPrime(n // num): # isPrime(n // num)放在最后,利用短路效应,可以使大数的素数判定次数最少 return int(str(n // num) + str(num)) # 返回值转字符串拼接后再转整数 def countnumber(n,num): m, countnum = 1, 0 while n//m > 0: high, mod = divmod(n, m*10) curNum, low = divmod(mod, m) if curNum > num: countnum += high*m + m elif curNum == num: countnum += high*m + low + 1 else: countnum+= high*m m = m*10 return countnum if __name__ == '__main__': n = int(input()) # 输入ID,整数,保证是两个素数的积 number = int(input()) # 输入0-9之间的一个数字 ID = checkId(n) countNumber = countnumber(ID,number) # 统计 number的个数 print('WHUT' + str(ID)) print(countNumber)