python-趣味百题1

1.尾数前移:求一个自然数N,个位数是6,将6移到最前面所得数是N的4倍。

思路:

1).令末尾数t=6,除末位以外部分为n

2).t连续*10移动到最高位,再加上n

3).t+n==(10*n+6)*4

def fun(n):
    nn = n
    t = 6
    while nn > 0:
        t *= 10
        nn /= 10       
        m=10 * n + 6
    if t + n == m * 4:
        print m
for x in range(1,100000):   
    fun(x)

2.水仙花数:是指一个n位数(n>=3),它的每个位上的数字的n次幂之和等于它本身,求100-999之间所有的水仙花数 例如:1^3+5^3+3^3=153

  def isArmstrongNumber():
    a = []
    t = n
    while t > 0:
        a.append(t % 10)
        t /= 10
       
    k = len(a)
    s = 0
    for x in a:
        s += x ** k
        return s == n

for x in range(100,1000):
    if isArmstrongNumber(x): print x

3.不重复的三位数:0-9这10个数可以组成多少个不重复的三位数

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
                print a,b,c
                count += 1
print 'count:',count

4.自守数:如果某个数的平方的末尾几位等于这个数,那么就称这个数为自守数。显然,5和6是一位自守数,求10000以内的自守数

for n in range(1,10000):
    l = len(str(n))
    t = n * n % (10 * l)
    if t == n:
        print n

#列表解析 print [for n in range(1,10000) if n * n % (10 * len(str(n))) == n]

5.孪生素数:两个素数之差为2,求1-100之间所有孪生素数 筛法找素数:

1).建立一张表,用True,False标识一个数是否是素数

2).找到一个素数p。然后把p的倍数都标记成非素数

3).查表检测p+1,如果非素数检测下一个,是素数执行1的操作

pt = [True]*100
res = []

for p in range(2,100):
    if not pt[p]:continue
    res.append(p)
    for i in range(p * p,100,p):
        pt[i] = False
print res

for i in range(1,len(res)):
    if res[i] - res[i-1] == 2:
        print res[i-1],res[i]

posted @ 2017-04-14 17:37  刘荒荒  阅读(466)  评论(0编辑  收藏  举报