Project Euler 58

本文介绍了一种通过素数螺旋生成素数的方法,并通过预生成较小范围内的素数列表来提高判断大范围内数字是否为素数的效率。文中详细展示了Python实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很遗憾……很久没有来写程序了……

不仅没有写,即便写了……还是用的python……

想安慰自己说,用什么语言无所谓,只要回了算法什么的就好……


但我还是没看出好来……


def prime(n):
	a = [1 for i in range(n)]
	a[0], a[1], a[2] = 0, 0, 1
	pl = []
	t = s = 0
	for i in range(2,n):
		if a[i]:
			s+=i
			pl.append(i)
			j=i*i
			t+=1
			while j<n:
				a[j]=0
				j+=i
	return pl

def isprime(n, prime_list):
	if n in prime_list:
		return True
	for i in prime_list:
		if n<i:
			return True
		if n%i == 0:
			return False
	return True

def main():
	prime_list = prime(100000)
	count_prime = 0
	now = 1
	circle = 1
	while True:
		circle += 1
		now += circle
		if isprime(now,prime_list):
			count_prime += 1
		for i in range(3):
			now += 2*circle-2
			if isprime(now,prime_list):
				count_prime += 1
		if count_prime/(4*circle-3)<0.1:
			print(2*circle-1)
			break
		now += circle-1

if __name__ == '__main__':
	main()

生成的方法看自己的想法了,然后判断素数的时候,因为范围比较大,所以先生成小范围的,然后用这个小范围的进行检测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值