团体程序设计天梯赛-练习集——L1-028 判断素数
前言
一道10分的题目,相对来说比较简单,思考的时候要仔细且活跃,有时候在写代码的时候一些代码的出现很多余,并且会影响最后的结果
L1-028 判断素数
本题的目标很简单,就是判断一个给定的正整数是否素数。
输入格式:
输入在第一行给出一个正整数N
(≤ 10),随后N
行,每行给出一个小于2
31次方的需要判断的正整数。
输出格式:
对每个需要判断的正整数,如果它是素数,则在一行中输出Yes
,否则输出No
。
输入样例:
2
11
111
输出样例:
Yes
No
好了,以上的题目就到这里,这道题给人的第一感觉就是很简单,确实,这道题没什么难度
我做题的过程中,刚看到题就有了思路,先搞一个变量,存储输入的数字数量,然后再搞两个数组,注意了,这里我首先想到的是数组,一个用于存储输入的数字,另一个用于存储这个数字是否是素数,这里是因为我不喜欢再一个for里面写很多东西,所以我下意识的定义了两个数组为了再写一个for输出好使,但是,看哈,我的写法的话,一个for用来输入数字,一个用来判断是否是素数,还有一个输出结果,我靠,这样真的太鸡肋了,但是代码能跑能输出,看一下代码先
代码1
#include <stdio.h>
#include <math.h>
int main()
{
int n;
scanf("%d",&n);
int num[n];
int count[n];
int i = 0,j = 0;
for(i = 0; i < n;i++)
{
scanf("%d",&num[i]);
count[i] = 0;
if(num[i] == 1)count[i] = 1;
for(j = 2;j <= sqrt(num[i]);j++)
{
if(num[i] % j == 0){count[i] = 1;break;}
}
}
for(i = 0; i < n;i++)
{
if(count[i])printf("No\n");
else printf("Yes\n");
}
}
上面这个代码太鸡肋了,然后看一眼,最后一个for貌似没什么用,放到上一个for里面,得到了下面的代码
代码2
#include <stdio.h>
#include <math.h>
int main()
{
int n;
scanf("%d",&n);
int num[n];
int count[n];
int i = 0,j = 0;
for(i = 0; i < n;i++)
{
scanf("%d",&num[i]);
count[i] = 0;
if(num[i] == 1)count[i] = 1;
for(j = 2;j <= sqrt(num[i]);j++)
{
if(num[i] % j == 0){count[i] = 1;break;}
}
if(count[i])printf("No\n");
else printf("Yes\n");
}
}
其实这样就差不多了,但是数组在这里看起来不太舒服,其实这里面就不需要用到数组了,每一个数判断一次直接输出了就,不需要用数组存储这个数字变量和素数判断,得到最终版的答案,上代码
代码(终极版
#include <stdio.h>
#include <math.h>
int main()
{
int n;
scanf("%d",&n);
int num;
int count;
int i = 0,j = 0;
for(i = 0; i < n;i++)
{
scanf("%d",&num);
count = 0;
if(num == 1)count = 1;
for(j = 2;j <= sqrt(num);j++)
{
if(num % j == 0){count = 1;break;}
}
if(count)printf("No\n");
else printf("Yes\n");
}
}
虽然我们现在把题做完了,但是这道题有一个容易忽略的细节,大家看
这两个标红框的地方,这里有一种情况容易忽略掉,那就是输入的数字是1的情况,如果这个没有写这个情况的话,会得到
这样的一个情况,大家在写的时候一定要注意细节不然4分就白白送人了
以上所有代码均为自己编写,本人水平有限,如果有哪里出错或者有更好的解法可以与我私信或在评论区里进行讨论
上一题:团体程序设计天梯赛-练习集——L1-027 出租
下一题:团体程序设计天梯赛-练习集——L1-029 是不是太胖了