9ms动规+筛法
2025-08-08 13:24:17
发布于:湖北
1阅读
0回复
0点赞
这道题的难度比想象中的大一点,虽然标注的是枚举,但是python纯枚举会超时,使用动态规划之后,刚好有一两个1s多一点点,多运行几次就ac了
意识到不是动规的问题,改成埃氏筛法,时间控制在了几十ms
动规和筛法写在一个循环中之后,c++运行9ms
# include<iostream>
using namespace std;
int main(){
int l,r,p=2;
cin>>l>>r;
int arr[r+2]={};
for(int i=2;i<=r;i++){
arr[i]=1;
}
while (p*p<=r){
if(arr[p]==1){
for(int i=p*p;i<=r;i+=p){
arr[i] =arr[i/p]+1;
}
}
p++;
}
int sum = 0;
for(int i=l;i<=r;i++)sum+=arr[i];
cout<<sum;
return 0;
}
lst=[i for i in range(r+1) if bucket[i]]
for i in range(4,r+1):
while bucket[i] == 0:
for j in lst:
if i%j == 0:
bucket[i] = bucket[i//j]+1
break
这里空空如也
有帮助,赞一个