【发布时间】:2014-02-24 20:24:01
【问题描述】:
如何获得 GCD(2^a[i]-1,2^a[j]-1) 1
from fractions import gcd
powj=pow(2,n[j])-1
powk=pow(2,n[k])-1
gcdjk=gcd(powj,powk)
会导致大数字出现问题并产生运行时错误。
除了 1 和它们自身之外没有其他因子的素数之外,我在 2^i-1 值中看不到模式。
i 2^i -1
--------------
1 1 = 1
2 3 = 1,3
3 7 = 1,7
4 15 = 1,3,5,15
5 31 = 1,31
6 63 = 1,3,7,9,21,63
7 127= 1,127
8 255= 1,3,5,15,17,51,85,255
编辑: 仅需要为 2^i-1 形式的数字解决此问题。以下是代码:
import sys
import math
from fractions import gcd
t=int(input())
for i in range(0,t):
door=0
c=int(input())
n = map(int,sys.stdin.readline().split(' '))
for j in range(0,c-1):
for k in range(j+1,c):
if( gcd(n[j],n[k]) == n[k]):
powj=pow(2,n[j])-1
powk=pow(2,n[k])-1
gcdjk=gcd(powj,powk)
if(gcdjk==powk):
door = door+1
else:
door = door-gcdjk
print (door)
输入样本:
2
3
10 2 3
2
3 5
约束:
1<=T<=20
1<=ArraySize<=10^5
1<=a[i]<=100
【问题讨论】:
-
@RC。我正在寻找答案作为 2^i - 1 的特例,所以它不是重复的..
-
你能显示你得到的错误的回溯吗?
-
对不起,网上法官不告诉,我也找不到不好的案子。
-
这里有一个模式。
2^gcd(6,8)-1是什么?gcd(2^6-1, 2^8-1)是什么? -
这不是重复的,至少不是那个问题。
标签: python algorithm python-2.7 greatest-common-divisor