写在前面:【学点C语言系列】是新开的专栏,博主电子信息工程专业毕业后,从事了4年硬件工程师,最近一次接触C语言还是4年前的毕设,想重新系统的学习一下C语言,从最基本的
Hello World
开始。
上两篇博客:
1. 问题描述
判断一个数是不是素数?素数也称为质数,指这个数只能被1和这个数本身整除,不能被其他数整除,如11
,13
2. 解题思路
将S依次被2~S-1
之间的每一个整数整除,如果都不能整除,则S为素数;
定义初始flag=0
记录依次整除的情况,能被整除的,flag+1
;则判断是素数的条件是:flag==0
;
int flag = 0; //定义一个flag记录整除的情况
if (S%i == 0)
{
flag++; //能被整除的数的个数
}
3. 代码实现
#define _CRT_SECURE_NO_WARNINGS 10
/*
文件名:pdss.c
作者:记得诚
问题:素数判断
*/
#include <stdio.h>
int main()
{
int flag = 0; //定义一个flag记录整除的情况
int S; //被判断数
int i; //循环数
printf("请输入一个整数:");
scanf("%d", &S);
for (i = 2; i < S; i++) //
{
if (S%i == 0)
{
flag++; // 能被整除的数的个数
}
}
if (flag == 0)
{
printf("%d 是素数\n", S);
}
else
{
printf("%d 不是素数\n", S);
}
return 0;
}
编译,输入23,返回23是素数
;
请输入一个整数:23
23 是素数
请按任意键继续. . .
编译,输入39,返回39不是素数
;
请输入一个整数:39
39 不是素数
请按任意键继续. . .
4. 优化一下
将S依次除以 2~ 之间的每一个整数,如果都不能整除,则S为素数;
用sqrt(S)表示,sqrt的定义是double __cdecl sqrt(_In_ double _X)
;定义变量时候需将double强制转换为int;
G = (int)sqrt((double)S); //double转int
代码实现如下:
#define _CRT_SECURE_NO_WARNINGS 10
/*
文件名:pdss1.c
作者:记得诚
问题:素数判断
*/
#include <stdio.h>
#include <math.h> //添加数学函数库
int main()
{
int S; //被判断数
int i; //循环数
int G; //S开平方根
printf("请输入一个整数:");
scanf("%d", &S);
G = (int)sqrt((double)S); //double转int
for (i = 2; i <= G; i++)
{
if (S%i == 0)
break;
}
if (i > G) //for循环完成时i=G+1
{
printf("%d 是素数\n", S);
}
else
{
printf("%d 不是素数\n", S);
}
return 0;
}
编译,输入59,返回59是素数
;
请输入一个整数:59
59 是素数
请按任意键继续. . .
永远相信美好的事情即将发生!作者记得诚,写于安徽合肥,时间2020-04-06 PM00:59