‘壹’ python题:
1. 欧几里德算法
欧几里德算法又称辗转相除法, 用于计算两个整数a, b的最大公约数。其计算原理依赖于下面的定理:
定理: gcd(a, b) = gcd(b, a mod b)
证明:
a可以表示成a = kb + r, 则r = a mod b
假设d是a, b的一个公约数, 则有 d|a, d|b, 而r = a - kb, 因此d|r。
因此,d是(b, a mod b)的公约数。
加上d是(b,a mod b)的公约数,则d|b, d|r, 但是a = kb + r,因此d也是(a, b)的公约数。
因此,(a, b) 和(a, a mod b)的公约数是一样的,其最大公约数也必然相等,得证。
欧几里德的Python语言描述为:
1
2
3
4
5
6
7
8
9
10
def gcd(a, b):
if a < b:
a, b = b, a
while b != 0:
temp = a % b
a = b
b = temp
return a
2. Stein算法
欧几里德算法是计算两个数最大公约数的传统算法,无论是理论,还是从效率上都是很好的。但是他有一个致命的缺陷,这个缺陷只有在很大的素数时才会显现出来。
考虑现在的硬件平台,一般整数最多也就是64位, 对于这样的整数,计算两个数值就的模很简单的。对于字长为32位的平台,计算两个不超过32位的整数的模,只需要一个指令周期,而计算64位以下的整数模,也不过几个周期而已。但是对于更大的素数,这样的计算过程就不得不由用户来设计,为了计算两个超过64位的整数的模,用户也许不得不采用类似于多位除法手算过程中的试商法,这个过程不但复杂,而且消耗了很多CPU时间。对于现代密码算法,要求计算128位以上的素数的情况比比皆是,设计这样的程序迫切希望能够抛弃除法和取模。
Stein算法由J.Stein 1961年提出,这个方法也是计算两个数的最大公约数。和欧几里德算法不同的是,Stein算法只有整数的移位和加减法,这对于程序设计者是一个福音。
为了说明Stein算法的正确性,首先必须注意到以下结论:
gcd(a, a) = a, 也就是一个数和他自己的公约数是其自身。
gcd(ka, kb) = k * gcd(a, b),也就是最大公约数运算和倍乘运算可以交换,特殊的,当k=2时,说明两个偶数的最大公约数比如能被2整除。
Stein算法的python实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
def gcd_Stein(a, b):
if a < b:
a, b = b, a
if (0 == b):
return a
if a % 2 == 0 and b % 2 == 0:
return 2 * gcd_Stein(a/2, b/2)
if a % 2 == 0:
return gcd_Stein(a / 2, b)
if b % 2 == 0:
return gcd_Stein(a, b / 2)
return gcd_Stein((a + b) / 2, (a - b) / 2)
3. 一般求解实现
核心代码很简单:
1
2
3
def gcd(a, b):
if b == 0:return a
return gcd(b, a % b)
附上一个用Python实现求最大公约数同时判断是否是素数的一般方法:
程序如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env python
def showMaxFactor(num):
count = num / 2
while count > 1:
if num % count == 0:
print 'largest factor of %d is %d' % (num, count)
break #break跳出时会跳出下面的else语句
count -= 1
else:
print num, "is prime"
for eachNum in range(10,21):
showMaxFactor(eachNum)
输出如下:
1
2
3
4
5
6
7
8
9
10
11
largest factor of 10 is 5
11 is prime
largest factor of 12 is 6
13 is prime
largest factor of 14 is 7
largest factor of 15 is 5
largest factor of 16 is 8
17 is prime
largest factor of 18 is 9
19 is prime
largest factor of 20 is 10
‘贰’ PYthon练习题
inport 关键字写错了,是 import 不是 inport 。
importrandom
‘叁’ Python练习题
1
print("hi, “”“how are you”””, I’m fine and you")
2
a, b= map(int, input().split())
r=a//b
m=a%b
‘肆’ python题目
str1="computer4"
str1.split()[0]*4
Out[175]:''
[str1.split()[0]]*4
Out[176]:['computer','computer','computer','computer']
str2="science#5"
[str2.split('#')[0]]*4
Out[178]:['science','science','science','science']
str2.split('#')[0]*4
Out[179]:'sciencesciencesciencescience'
‘伍’ Python题目
#输出"Hello,world!"
print('hello,world')
#从键盘输入4个整数a,b,c,x计算函数值
a=int(input('请输入a的值:'))
b=int(input('请输入b的值:'))
c=int(input('请输入c的值:'))
x=int(input('请输入x的值:'))
y=(a*x)^2+b*x+c
print('最终的值为:%s'%y)
#计算费波纳契数列的第n项的递归程序
deffibonacci(n):
ifn==0orn==1:
returnn
else:
returnfibonacci(n-1)+fibonacci(n-2)
print(fibonacci(3))
#从键盘输入若干个用空格分开的单词,按字典序排序后输出
inputWords=input('请输入几个单词,用空格分开 ')
word=sorted(inputWords.split(''))
print(word)
‘陆’ 求python题目解答(初学阶段)
列表lst中有4个元素,看有几个元素,就看逗号就好了,即便是嵌套列表,在两个逗号之间,也算一个元素,你可以使用len(lst)得到结果。
lst[3]的数据类型为列表,列表用[]表示。
lst[3][1][2]=10
lst[-1][-1][1]=9;
lst[-1][-1][3]=12;
lst[-1][-1][-3:]=[9, 10, 12];
lst[-1][-1][-3:][::-1]=[12, 10, 9] #::-1表示列表反转
‘柒’ python练习题
#!/usr/bin/env/python
#coding:utf-8
#
deffibonacci(n):
"""
.Foryourinformation,:
0,1,1,2,3,5,8,13,21,34,55,89,144,233,...
Thatis,,
twonumbersthatprecedeit.Forexample,
secondnumber,,andsoon...
,thenyourprogramshouldprint/outputinone
linetheFibonaccisequenceupton.
Forexample,ifnis100,yourprogramshouldoutput0,1,1,2,3,5,8,13,21,34,55,89,
Ifnis8,yourprogramshouldoutput0,1,1,2,3,5,8,
"""
def__iter__(n):
a,b=0,1
yielda
ifn==0:
return
yieldb
ifn==1:
return
whilea+b<=n:
a,b=b,a+b
yieldb
returnlist(__iter__(n))if__name__=="__main__":
printfibonacci(35)
‘捌’ python基础题 真心求解
sep="|",字符串中间用"|"隔开
end="#",字符串末尾加上"#"
所以第一个显示Hello|100#,第二个显示您好,所以是
D.Hello|100#您好
‘玖’ python基础题
(1)count = 0
(2)while count < 3:
(3) name = input()
(4) password = input()
(5) if name == 'Kate' and password == '666666':
(6) print("登录成功!")
(7) break
(8) else:
(9) count += 1
(10) if count == 3:
(11) print("3次用户名或者密码均有误!退出程序!")
程序开始执行:
(1):定义int类型变量count并为其赋初始值0,执行语句(2)。
(2):循环语句,若变量count>=3则跳出循环,程序结束。若count<3则进入循环,执行语句(3)。
(3):定义str类型变量name并调用python内置输入函数input(),控制台等待输入,假设输入"Kate",执行语句(4)。
(4):定义str类型变量password并调用python内置输入函数input(),控制台等待输入,假设输入"666666"。执行语句(5)
(5):判断语句,若name变量的__str__()函数的返回值等于字符串'Kate'的__str__()函数的返回值且password变量__str__()函数的返回值等于字符串'666666'的__str__()函数的返回值则执行语句(6),否则执行语句(9),因假设中name变量的值为"Kate",password变量的值为"666666",故执行语句(6)
(6):调用内置输出函数print(self, *args, sep=' ', end='\n', file=None),其中*args对应实参为“登录成功!”,故输出“登录成功”。执行语句(7)
(7):break关键字,跳出循环,程序无后续代码,程序结束。
(9):count变量的值等于count变量的值加1。执行语句(10)
(10):判断count变量的值是否等于3,如果是执行语句(11),否则执行语句(2)
(11):调用内置输出函数print(self, *args, sep=' ', end='\n', file=None),其中*args对应实参为“3次用户名或密码均有误!退出程序”,故输出“3次用户名或密码均有误!退出程序”。执行语句(2),因count>=3,故执行完(2)后程序结束。