python 入门级教你如何拿到小姐姐微信
第一题:
首先错误的思路,首先找出 707829217/2+1 里面的所有奇数,然后再利用两个for,来判断
import math def func_get_prime(n): return filter(lambda x: not [x % i for i in range(2, int(math.sqrt(x)) + 1) if x % i == 0], range(2, n + 1)) a = list(func_get_prime(101118460)) for i in a : for j in a : if i*j == 707829217: print(i) print(j) exit() else: pass
这样会让算法变复杂,因为首先求这么大一个数里面的全部奇数就已经很难,然后你还用了两个for遍历查询
def handlerNum(num): # 质数大于 1 if num > 1: # 查看是否有其他因子 for i in range(2, num//2+1): if (num % i) == 0: return False break else: return True # 如果输入的数字小于或等于 1,不是质数 else: print(num, "不是质数") for i in range(3,101118460) : if 707829217%i == 0 : if(handlerNum(i)) : j = 707829217//i if(isinstance(j,int)): if handlerNum(j): print(i) exit()
输出结果是
8171 86627
至此我们已经拿到小姐姐的微信了,我们再来做第二题
第二题:
从1到866278171的奇数里面一共有多少个3
a = 0 for i in range(1,866278171): if i%2 != 0: x = str(i) num = x.count('3') if num : a = a+num print(a) print(a)
虽然已经写出来了,但是感觉很慢。还需优化
优化:仅提供一个思路,转换成数学解决方法,判断3在个位,十位 。。。。 出现的情况