我们知道整数13是素数,求解13是素数的算法有多种方法,第一种方法用穷举法测试,根据素数的概念,除了1和13之外再也找不到整除的数,第二种方法开根号法,就是对13开根号,然后取整数,请问用开根号法判断13是素数,时间运行次数比穷举法少运算()次
A.10
B.9
C.8
D.7
- · 有18位网友选择 D,占比60%
- · 有7位网友选择 B,占比23.33%
- · 有3位网友选择 A,占比10%
- · 有2位网友选择 C,占比6.67%
A.10
B.9
C.8
D.7
一个关于logn的多项式时间算法.结合教材中素数测试的偏假蒙特卡罗算法,设计一个素数测试的拉斯维加斯算法.
算法设计:设计一个拉斯维加斯算法,对于给定的正整数,判定其是否为素数.
数据输入:由文件input.txt给出输入数据.第1行有1个正整数p.
结果输出:将计算结果输出到文件output.txt.若正整数p是素数,则输出“YES",否则输出“NO".
(2)试找出,上述算法Primality中可用于替换整数30030的另一个整数(可使用大整数),使得用此整数代替30030后,算法的正确率提高到85%以上.
算法设计:设计一个拉斯维加斯算法,对于给定的奇素数p和整数x,计算x的模p平方根.
数据输入:由文件input.txt给出输入数据.第1行有2个正整数p和x.
结果输出:将计算的x的模p平方根输出到文件output.txt.当不存在x的模p平方根时,输出0.
(1)穷举法 ,由于a阳的最大公约数不可能比a和b中的较小者还大,否则一定不能整除它,因此,先找到,a和b中中的较小者t,然后从t开始逐次减I尝试每种可能.即检验t到I之间的所有整数,第一个满足公约数条件的t就是和b的最大公约数。
(2)欧几里得算法,也称辗转相除法、对正整数a和b,连续进行求余运算,直到余数为0为止.此时非0的除数就是最大公约数。设r=a mod b表示a除以上的余数,若r≠0将b作为新的a,r作为新的b,即Ged(a,b)=Ged(b,r),重复a mod b运算,直到r=0为止,此时b为所求的最大公约数。例如,50和15的最大公约数的求解过程可表示为:Ged(50,15)=Ged(15,5)=Ged(5,0) =5。
(3)递归方法。对正整数a和b,当a>b时,若a中含有与b相同的公约数,则a中去掉b后剩余的部分a-b中也应含有与b相同的公约数,对a-b和b计算公约数就相当于对a和b计算公约数。反复使用最大公约数的如下3条性质,直到a和b相等为止,这时,a或b就是它们的最大公约数。
性质1如果a>b, 则a和b与a-b和b的最大公约数相同, 即Ged(a,b)=Ged(a-b,b)
性质2如果b>a, 则a和b与a和b-a的最大公约数相同, 即Ced(a,b)=Ged(a,b-a)
性质3如果a=b, 则a和b的最大公约数与a值和b值相同, 即Ged(a,b)=a=b
例如,求72和40的最大公因数,即计算GCD(724,344):
GCD(724,344)=GCD(344,724%344)=GCD(344,36)
=GCD(36,344%36)=GCD(36,20)
=GCD(20,36%20)=GCD(20,16)
=GCD(16,20%16)=GCD(16,4)
=GCD(4,16%4)=GCD(4,0)
=4
为了保护您的账号安全,请在“简答题”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!