我需要解决任务,有一个条件:
由N
开始的序列有17个连续自然数。对于此序列中的任何数字a
,该序列中还有另一个数字b
,例如GCD (a, b)> 1
。找到满足此条件的最小N。
我使用此代码
for i in range(2, 100000000):
not_division = 0
lst = list(range(i, i+17))
#print(lst)
for j in lst:
counter = 0
for k in lst[1:]:
if gcd_iterative(j, k) > 1 and gcd_iterative(j, k) != k:
counter += 1
if counter == 0:
not_division += 1
#print('%s have no delimiter' % j)
if not_division == 0:
print('%s SUCCESS' % str(lst))
但是没有序列。 也许我做错了。
答案 0 :(得分:3)
我会尝试使用一种不太暴力的方法来解决这个问题。
首先进行一些思想实验。每隔一个数字将具有共同的因子2。对于其余的8或9,您需要更多的因素。因此,例如,您可能对其中某些因素有3的共同系数。然后是另一个因素,依此类推,例如:
2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
* 3 * * 3 * * 3 * * 3 * * 3 * * 3
* * * 5 * * * * 5 * * * * 5 * * *
^ ^ ^ ^
因此,现在以更系统的方式进行此操作。考虑所有小于17的素因。尝试这些素的每种组合,并为每种组合尝试每个可能的偏移量(但仅在序列中至少出现2个那些)。看看其中哪一个导致每个人至少都有一个伴侣的情况。然后使用Chinese remainder theorem找到相应的序列。
实际上只有2个候选人:
2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
3 * * 3 * * 3 * * 3 * * 3 * * 3 *
* 5 * * * * 5 * * * * 5 * * * * 5
7 * * * * * * 7 * * * * * * 7 * *
* * * * * 11 * * * * * * * * * * 11
13 * * * * * * * * * * * * 13 * * *
,其特征在于满足以下约束的第一个数字 x :
(使用Sage函数crt计算)和上面的镜像
2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
* 3 * * 3 * * 3 * * 3 * * 3 * * 3
5 * * * * 5 * * * * 5 * * * * 5 *
* * 7 * * * * * * 7 * * * * * * 7
11 * * * * * * * * * * 11 * * * * *
* * * 13 * * * * * * * * * * * * 13
特征在于
更大,所以2184…2200是满足您要求的第一个序列:
应该在您的循环范围内。实际上,它最多可以循环到30030,即质数的乘积最多为17。因此,如果您的循环确实完成了,但是错过了此序列,那么在某处一定有一个错误,知道序列可以帮助您调试