Project Euler 35

本文通过Python实现了一种特殊的素数查找算法——循环素数。作者最初误解了题目要求,经历了从反转到全排列的尝试,最终理解题目是要求通过循环移位来判断一个数及其所有移位形式是否均为素数。

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

本来是,用C用多了,看到python就感到微微头疼……

不知道为啥……可能是build_in function太多了?


但是考试考python啊!

所以这题用python写了……

其实用C写不会难的……


首先……读错题了……简直是大错特错……

本题是要求不断地shift,看看是否都是prime


我第一次看成了,要reverse,这个错了……

第二次看成了,要全排列……也错了……

擦……


原来是shift,那么我下面的代码就二逼了……


算了……反正做出来了……这个代码写的也不是太难看(因为我修改过了……)


def shift(shift_prime):
	l = shift_prime[1:]
	l.append(shift_prime[0])
	return l

	
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, a

def main():
	count = 0
	prim, f = sss(1000000)
	for i in prim:
		shift_prime = list(str(i));
		t = 0
		for k in range(7):
			shift_prime = shift(shift_prime)
			new_prime = int("".join(shift_prime))
			if not f[new_prime]:
				t = 1
				break
		if not t:
			count += 1;
	print(count)	

if __name__ == '__main__':
	main()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值