python-趣味百题1
思路:
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]