Python练习

1.判断素数函数
描述‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
写一个函数isPrime(n)用于判断一个数字n是不是素数,用户输入一个正整数,在一行内输出不大于该数的所有素数,各数后面用一个空格分隔。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
输入格式
输入一个正整数‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
输出格式
不大于该数的所有素数,各数后面用一个空格分隔。

def isPrime(n):         
  for i in range(2,int(n**0.5)+1):     
     if n%i==0:            
       return 0   
  return 1   
num = int(input())       
for i in range(2,num+1):    
 if isPrime(i)==1:                             
      print(i,end=' ')

2.牛顿迭代法求平方根

def sqrt_newton(num):
	x=sqrt(num)
	y=num/2.0
	count=1
	while abs(y-x)>0.00000001:
		print count,y
		count+=1
		y=((y*1.0)+(1.0*num)/y)/2.0000
	return y
print(sqrt_newton(5))
print(sqrt(5))
### 回答1: 可以使用素数筛法来解决这个问题。素数筛法是一种从小到大枚举数字并筛除合数的方法。 算法思路如下: 1. 创建一个长度为n+1的bool数组prime,其中prime[i]表示i是否是素数。 2. 初始化,将0和1设为非素数,其余数字设为素数。 3. 从2开始枚举数字i,如果prime[i]为true,则将i的倍数设为非素数。 4. 遍历prime数组,输出所有值为true的下标。 以下是Python代码示例: ```python def prime_numbers(n): prime = [True] * (n+1) prime[0] = prime[1] = False for i in range(2, int(n ** 0.5) + 1): if prime[i]: for j in range(i*i, n+1, i): prime[j] = False for i in range(n+1): if prime[i]: print(i, end=' ') ``` 使用时,调用 `prime_numbers(100)` 即可输出大于100的所有素数。 ### 回答2: 题目描述 本题要求编写程序,输入一个正整数 N,输出大于 N 的全部素数,每行不超过 10 个数,相邻数字间有一个空格。 输入格式 输入在一行中给出一个正整数 N(1<N≤10000)。 输出格式 按照格式要求输出素数,每行不超过 10 个数,相邻数字间有一个空格,最后一行输出完整。题目保证至少有一个素数存在。 输入样例: 50 输出样例: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 提供思路 本题考查的是素数的求解。素数的概念比较清楚:只能被 1 和本身整除的自然数。因此本题的思路也是比较清晰的:对于每个数 N,判断它是否是素数,再输出。算法时间复杂度为 O(n^2),显然这个算法对于大数不太适用。 思路优化 针对这个问题,我们可以进行一定的优化,使得算法时间复杂度更加优化。这里提供了一种优化思路:如果一个数 N 不是素数,那么它的一个因数一定在 sqrt(N) 以内。因此在判断素数时不必将 N 比至 N - 1。 上代码 ### 回答3: 素数是指只能被1和本身整除的正整数。要求输出大于用户输入的正整数的所有素数,可以采用“筛法”来解决。 具体步骤如下: 1. 首先,将需要判断的正整数集合,初始化为从2到用户输入的正整数。因为1既不是素数也不是合数,所以从2开始判断。 2. 在集合中,选取最小的素数,将其作为素数集合的第一个元素,并在原有集合中移除所有能被该素数整除的数。如此重复,直到剩余的数全部为素数。 3. 将找到的素数输出,用空格隔。 下面是示例Python代码实现: ```python num = int(input("请输入一个正整数:")) nums = list(range(2, num+1)) # 初始化需要判断的正整数集合 while nums: prime = nums[0] # 选择目前集合中最小的数 print(prime, end=' ') nums = [n for n in nums if n % prime != 0] # 移除所有能被prime整除的数 print() # 换行 ``` 通过上述代码,用户输入一个正整数后,即可输出大于该数的所有素数,并用空格隔。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值