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
View Code

这样会让算法变复杂,因为首先求这么大一个数里面的全部奇数就已经很难,然后你还用了两个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()
View Code

输出结果是

8171
86627
View Code

至此我们已经拿到小姐姐的微信了,我们再来做第二题

 

第二题:

从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)
View Code

虽然已经写出来了,但是感觉很慢。还需优化 

 

优化:仅提供一个思路,转换成数学解决方法,判断3在个位,十位 。。。。 出现的情况

posted @ 2019-04-24 10:23  小跑跑泡  阅读(425)  评论(0编辑  收藏  举报