竞赛
考级
入门题解,我的代码如下(看到的觉得有用就赞一下)
我,新秀答案共享师(编程地板砖),期待你滴官主(和赞)
#include<bits/stdc++.h> using namespace std; int main(){ int n,m; cin>>n>>m; int s[105]; for(int i=1;i<=n;i++){ cin>>s[i]; } int c,num=0; for(int i=1;i<=m;i++){ cin>>c; int g=0; for(int j=2;j<s[c];j++){ if(s[c]%j0){ g=1; } } if(g0){ num+=s[c]; } } cout<<num; return 0; }
空降坐标:CP002826 请看代码
OK啊,素数等于质数 因为小于等于1的数不是质数, 且素数除自己和1其他的都不能除掉, 所以建立一个判断质数的bool类型函数, 上代码
代码如下
A296.体育课 - 题解 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 问题核心理解 这道题的本质是:从一组给定的数字中,根据指定的位置索引,筛选出那些是素数的数字,并将它们相加得到总和。 解题步骤分解 数据读取与存储 1.读取三个关键部分:小朋友总人数 n 和要挑选的人数 m。 2.读取一个长度为 n 的数组,按顺序存储每个小朋友卡片上的数字。 3.读取一个长度为 m 的数组,存储老师挑选的小朋友的编号(注意:题目中编号从 1 开始)。 素数判断函数 (本人没做,因为你会发现直接循环判断一下就行) 你需要实现一个判断素数的函数。素数(质数)是大于1的自然数,且只能被1和它自身整除。 优化思路:检查一个数 x 是否为素数时,只需用 2 到 √x(x的平方根)之间的整数去试除即可。因为如果 x 有大于 √x 的因数,那么它必然有一个小于 √x 的对应因数。 遍历与求和 遍历老师给出的 m 个编号。对于每个编号 qi: 索引转换:由于我们存储卡片数字的数组索引通常从0开始,而小朋友编号从1开始。所以,要获取对应卡片数字,需要用 qi - 1 作为下标去访问第一步中存储的数组。 判断与累加:取出该数字,用素数判断函数进行检查。 如果它是素数,则将其累加到一个 总和 (sum) 变量中。 输出结果 将计算得到的总和 sum 输出。 关键点与注意事项 索引转换:这是最容易出错的地方。一定要清楚题目输入的“编号”是从1开始的,而编程中数组往往是0开始索引的。 效率考虑:n 和 m 的最大值在题目中未明确给出,但采用 O(√x) 的素数判断方法对于一般竞赛题目的数据范围是足够高效的。 特殊值处理:在实现素数判断函数时,要记得数字 1 不是素数,最小的素数是 2。 思路流程图 整个过程可以总结为以下流程: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 代码实现(ALL AC,可放心食用) 蒜鸟蒜鸟,睡了
注意,本题解为 C++ 题解。 > 如果觉得本题解有用,麻烦大家点个赞吧。 这道题比较简单,只需判断一下 apia_{p_{i}}api 是不是质数,是质数就累加 apia_{p_{i}}api 最后输出结果就行了。 判断是否是质数的函数代码: 判断语句: 当然 p 可以不开数组,如下: 欧拉筛法: 后面得再调用一下: 判断语句: 或: 我就不给出整个代码了,让大家失望了吧。
提交答案之后,这里将显示提交结果~