题目让筛选素数,首先我们先了解一下什么是素数?简而言之素数就是不能被除1和他本身之外整除的数。那么思路就比较清楚了,我们让N以内所有的数都对小于他的数取余,只要有取余等于零的,说明他就可以被别的数整除,那么便不符合题意,删去。
接下来我们一步一步来。
第一步,敲出C语言的大致框架:
#include<stdio.h>
int main()
{
return 0 ;
}
第二步,创建一个所有N以内的数的数组供我们接下来进行删减。
#include<stdio.h>
int main()
{
int N = 0 ;
scanf("%d",&N);
int shuzu[N]; //版本较低的编译器不支持变长数组,所以先输入一个N给其赋值再创建数组。
int i = 0 ;
for (i=2;i<=N;i++)
{
shuzu[i] = i ;
}
for (i=2; i <=N; i++)
{
printf("%d ", shuzu[i]);
} //输出一下检查我们到这里做没做错。
return 0 ;
}
第三步,对每个数进行检查是不是素数,这里使用双重循环。
#include<stdio.h>
int main()
{
int N = 0 ;
scanf("%d",&N);
int shuzu[N]; //版本较低的编译器不支持变长数组,所以先输入一个N给其赋值再创建数组。
int i = 0 ;
for (i=2;i<=N;i++)
{
shuzu[i] = i ;
}
for(i=2;i<=N;i++)
{
if(shuzu[i])
{
for (int j = 2; j < i; j++) //让i对小于i的数取余即可
{
if(i%j==0)
{
shuzu[i] = 0;
break; //找到能整除的数就说明他不是素数,退出即可。
}
}
}
}
//到这里是把所有的非素数赋0了,题目要求是不输出,所以我们还要想办法把这些0删掉。在之前的打印函数那里加个条件,不是零才打印。
for (i=2; i <=N; i++)
{
if(shuzu[i]!=0)
{
printf("%d ", shuzu[i]);
}
}
return 0 ;
}
第一次写题解,主要是为了记录下自己的学习过程以及复盘,这是在记事本上敲得有一个分号是中文分号,复制到vscode等软件上就能检测出来,剩下的没有问题且能过系统。此代码思路简单且用到的技术也非常简单,含金量最高的就只是一个双重循环,希望能够帮助到看到这篇帖子的后来人!
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复