Project Euler 49

本文介绍了一种方法,通过筛选四位素数并使用差值来寻找符合特定模式的三个素数组合。这种方法虽然效率不是最高,但能够满足基本需求。代码实现包括素数生成、差值计算以及模式检查等功能。

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

顺利解决!这道题很有意思~做法也很多~


我的就是把4位的素数全都挑选出来,然后枚举第一个素数,第二个素数,用差值求出第三个,检查这三个数字组成是否相同~

就可以~

不过效率并不是太高~

但也满足了~^ ^

def sss(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 check(a, b, c):
	list_a = list(str(a))
	list_b = list(str(b))
	list_c = list(str(c))
	if sorted(list_a) == sorted(list_b) == sorted(list_c):
		return 1
	return 0
	
def main():
	prime = sss(10000)
	_4bit_prime = []
	for i in prime:
		if i>1000:
			_4bit_prime.append(i)
	length = len(_4bit_prime)
	for i in range(0,length):
		for j in range(i+1, length):
			diff = _4bit_prime[j] - _4bit_prime[i]
			third_prime = _4bit_prime[j] + diff
			if third_prime in _4bit_prime:
				if check(_4bit_prime[i], _4bit_prime[j], third_prime):
					print(_4bit_prime[i], _4bit_prime[j], third_prime)
					#return 0


if __name__ == '__main__':
	main()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值