专栏文章

6月15综合测试总结--陈老师

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip3disp
此快照首次捕获于
2025/12/03 05:30
3 个月前
此快照最后确认于
2025/12/03 05:30
3 个月前
查看原文

T619145 质数筛

赛时代码

错误原因:
1.思路错误:自己的思路是什么,为什么错误,一定要把错误原因找出来!!!
2.细节错误1,输入。。。。。
3.细节错误2,。。。。
CPP
#include<cstdio>
using namespace std;
int n,a[105];
bool fp(int x){
	if(x<2)return false; // 错误1:忘记,。。
	for(int i=2;i*i<=x;++i)if(x%i==0)return false;
	return true;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;++i)scanf("%d",&a[i]);
	for(int i=1;i<=n;++i){ //错误2:for循环写错
		if(fp(a[i]))printf("%d ",a[i]);
	}
	return 0;
}
如果没有做这道题,就直接写正确的思路。
如果做错了,也要写正确思路

正确思路

这道题应该要用埃式筛法选出10^5 以内的所有质数。 或者直接用判断质数(i*i<=n)的函数进行盼盼
CPP
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
const int N = 1e5 + 10;

bool vis[N]; // 记得数组开大一点
int n;

void shai() { // 埃氏筛法
	vis[1] = 1;
	for (int i = 2; i <= 100000; i++) {
		if (vis[i] == 0) {
			for(int j = 2*i; j <= 100000; j+=i){
				vis[j] = 1;
			}
		}
	}
}

int main() {
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	shai(); // 调用埃筛函数
	cin >> n;
	for (int i = 1, x; i <= n; i++) {
		cin >> x;
		if (vis[x] == 0) {
			cout << x << " ";
		}
	}
	
	return 0;
}

第二题。。。

评论

0 条评论,欢迎与作者交流。

正在加载评论...