题解
2025-07-01 18:11:03
发布于:浙江
2阅读
0回复
0点赞
注意,本题解为 C++
题解。
如果觉得本题解有用,麻烦大家点个赞吧。
这道题比较简单,只需判断一下 是不是质数,是质数就累加 最后输出结果就行了。
判断是否是质数的函数代码:
bool is_p(int n){
if(n<2)return 0;
for(int i=2;i*i<=n;i++){
if(n%i==0){
return 0;
}
}
return 1;
}
判断语句:
if(is_p(a[q[i]]))ans+=a[q[i]];
当然 p
可以不开数组,如下:
for(int i=1;i<=m;i++){
cin>>q;
if(is_p(a[q]))ans+=a[q];
}
欧拉筛法:
void euler(int n){
memset(is_p,1,sizeof(is_p));
is_p[0]=is_p[1]=0;
for(int i=2;i<=n;i++){
if(is_p[i])prime[++cnt]=i;
for(int j=1;j<=cnt && i*prime[j]<=n;j++){
is_p[i*prime[j]]=0;
if(i%prime[j]==0)break;
}
}
}
后面得再调用一下:
euler(1000);
判断语句:
if(is_p[a[q[i]]])ans+=a[q[i]];
或:
if(is_p[a[q]])ans+=a[q];
我就不给出整个代码了,让大家失望了吧。
全部评论 1
大家可以给个关注吗,谢谢啦qwq
2025-07-01 来自 浙江
0
有帮助,赞一个