想法是找到分母d <= 1,000,000的不可约分数的数量。这是我使用主筛和Euler的函数实现的:
target=10**6
s=0
def primesSieve(limit):
dictPrimes = {x:True for x in range(2, limit+1)}
for i in dictPrimes:
if dictPrimes[i]:
for f in range(2*i,limit+1, i):
dictPrimes[f] = False
return([i for i in dictPrimes if dictPrimes[i]==True])
primes=primesSieve(10**3)
def tot(n,primes):
result=n
for i in primes:
if n%i==0: result-=result/i
if result==n: result-=1
return result
for n in range(2,target+1):
s+=tot(n,primes)
print(s)
我知道这不是最有效的方法,但我想它也应该有用。但是,我没有得到正确的答案。请帮我弄清楚错误。谢谢!
更新 问题是筛子也必须高达1,000,000。现在我得到了正确答案。