python趣味百题(1)

from CoTime import *
from functools import *
from fn import _
print("import over")
import over
"""
题目
"""
# 网上抄的
print("Copy")
t = CoTime()
#

#
print()
print(t.cost())

#自己写的
#优缺点:
print("My")
t = CoTime()
#

#
print()
print(t.cost())
"""
0 ~ 9这10个数字可以组成多少不重复的3位数?
"""

# 网上抄的
print("Copy")
t = CoTime()
#
l = range(10)
count = 0
for a in l[1:]:
    for b in l:
        if a == b: continue  #过滤a == b
        for c in l:
            if c != a and c != b:  #过滤a == c, b == c
                count += 1

print(count)
#
print(t.cost())

#自己写的
print("My")
t = CoTime()
#
a = range(10)
b = range(1, 10)
count = 0
for x in b:
    for y in a:
        if x == y: continue
        for z in a:
            if z == x or z == y: continue
            count += 1
print(count)
#
print(t.cost())

Copy
648
耗时0.000秒
My
648
耗时0.000秒
"""
1.问题描述:
水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。 
例如:1 ^ 3+5 ^ 3+3 ^ 3=153。
求100 ~ 999之间所有的水仙花数。
"""
# 网上抄的
print("Copy")
t = CoTime()
#
def isArmstrongNumber(n):
    a = []
    t = n
    while t > 0:
        a.append(t % 10)
        t = t // 10
    k = len(a)
    return sum([x ** k for x in a]) == n

for x in range(100, 1000):
    if isArmstrongNumber(x):
        print(x,end="\t")
#
print()
print(t.cost())

#自己写的
#网上抄的通用性更好
print("My")
t = CoTime()
#
a = range(1, 10)
b = range(10)
n = 3
for x in a:
    for y in b:
        for z in b:
            if x ** n + y ** n + z ** n == x * 100 + y * 10 + z:
                print('{}{}{}'.format(x, y, z), end='\t')
#
print()
print(t.cost())

Copy
153	370	371	407	
耗时0.003秒
My
153	370	371	407	
耗时0.002秒
"""
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。
它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
例如,第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。
第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
编程求10000以内的完全数。
"""
print('copy')
t = CoTime()
def isPerfectNumber(n):
    a = 1
    b = n
    s = 0

    while a < b:
        if n % a == 0:
            s += a + b
        a += 1
        b = n / a

    if a == b and a * b == n:
        s += a

    return s - n == n

for k in range(2, 10000):
    if isPerfectNumber(k):
        print(k, end='\t')
print()
print(t.cost())


print('my')
t = CoTime()
# 网上抄的更节约时间,自己写的更无脑
def GetYinzi(n):
    a = range(1, n)
    re1 = [x for x in a if n % x == 0]
    return re1

for k in range(2, 10000):
    if (sum(GetYinzi(k)) == k):
        print(k, end='\t')
print()
print(t.cost())


copy
6	28	496	8128	
耗时0.117秒
my
6	28	496	8128	
耗时3.508秒
"""
220的真因数之和为1+2+4+5+10+11+20+22+44+55+110=284 
284的真因数之和为1+2+4+71+142=220 
毕达哥拉斯把这样的数对A、B称为相亲数:A的真因数之和为B,而B的真因数之和为A。

求100000以内的相亲数。
"""
# 网上抄的
print("Copy")
t = CoTime()
#
def sumOfFactors(k):
    p = 1
    q = k
    s = 0
    while p < q:
        if k % p == 0:
            s += p + q
        p += 1
        q = k // p

    if k == p * q and p == q:
        s += p

    return s - k


for x in range(2, 100000):
    y = sumOfFactors(x)
    if y > x == sumOfFactors(y):
        print(x, y, end='\t')

#
print()
print(t.cost())

#自己写的
#优缺点:
print("My")
t = CoTime()
#
@lru_cache()
def 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值