计算ID号
类型:函数
描述
我的微信ID是大写字母WHUT后面的数字是两个素数连在一起,大的在前,小的在后,如果我告诉你两数的乘积是多少,你能计算出我的ID号吗?
如果输入一个[0-9]之间的数字,你能统计出从1开始到我ID中的数字的序列里,一共出现多少次这个数字吗?
输入格式
第一行输入ID中两个素数的乘积
第二行输入一个[0-9]之间的数字
输出格式
第一行输出ID号
第二行输出数字的次数
输入输出示例
示例
输入:
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)
# def occ3(n,num):
# s = 0
# for i in range(len(str(n))):
# x = int(str(n)[-i-1])
# s += n//10**(i+1)*10**i
# if x == num:
# s += n%10**i+1
# if x > num:
# s += 10**i
# return s
# def isPrime(n): #判断素数的函数
# if n < 2 or n % 2==0:
# return False #0、1、负数以及偶数都不是素数
# for i in range(3, int(n**0.5)+1,2):
# if n % i == 0: #能被2到其自身减1的数整除的数不是素数
# return False
# else:
# return True #for循环正常结束,未遇到return的数是素数
# n = int(input()) #接收用户输入并转成整数707829217
# number = int(input())
# for i in range(n):
# if isPrime(i) and n%i==0 and isPrime(n//i): #判断i和N-i是否同时是素数,同时保证两个数加和为N
# print("WHUT{}{}".format(n//i,i))
# break #找到一个符合条件的数就结束循环
# m = int(str(n//i)+str(i))
# print(occ3(m,number))
# print(three(m,number))
# m = int(str(n//i)+str(i))
# num=0
# for j in range(1,m+1):
# if number in str(j):
# num=num+str(j).count(number)
# print(num)