-2
N、LおよびRが与えられた場合、範囲[ L、R]は範囲[1、N]の少なくとも1つの素数で割り切れる。範囲[1、N]の少なくとも1つの素数で割り切れる範囲[L、R]の数を数える効率的なアルゴリズム
制約:
1<=N<=50
1<=L,R<=10^18
例:
N=5
L=1
R=10
回答= 8
説明:範囲[1,5]である{2,3における
素数5}。 {2,3,5}の素数の少なくとも1つで割り切れる範囲[1,10]の数字は{2,3,4,5,6,8,9,10}です。
制約が高すぎるため、Pythonのコードで「時間制限超過」エラーが発生しています。
マイコード:
import math
def primes_till_n(n):
sieve=[True]*n
for i in xrange(3,int(n**0.5)+1,2):
if sieve[i]:
sieve[i*i::2*i]=[False]*((n-i*i-1)/(2*i)+1)
return [2]+[i for i in xrange(3,n,2) if sieve[i]]
n,l,r=map(int,raw_input().split())
primes=primes_till_n(n+1)
ct=0
for i in xrange(l,r+1):
for j in primes:
if i%j==0:
ct+=1
break
print ct
この質問はGlobalsoftが挑戦、Hackerearthを雇うからのものであり、課題は今の上にあると編集が提供されていません!
コードを表示してください。これは挑戦ですか?はいの場合は、あなた自身の試みを見せなくても、私たちがあなたのためにそれを解決することを期待していますか? – MrSmith42
問題のリンクを教えていただけますか?これが実行中のコンテストではないことを確認するだけです。 – halfo
この質問の正反対については、こちらを参照してください。https://github.com/niklasb/contest-algos/blob/master/number_theory.cpp#L90これは、インクルード - 除外の原理の基本的なアプリケーションです。 –