ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【学点C语言系列】03 判断一个数是不是素数

2020-04-07 19:02:41  阅读:201  来源: 互联网

标签:03 int double flag sqrt C语言 素数 整除


写在前面:【学点C语言系列】是新开的专栏,博主电子信息工程专业毕业后,从事了4年硬件工程师,最近一次接触C语言还是4年前的毕设,想重新系统的学习一下C语言,从最基本的Hello World开始。

上两篇博客:

【学点C语言系列】01 求阿姆斯特朗数

【学点C语言系列】02 判断年份是否为闰年


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}S​之间的每一个整数,如果都不能整除,则S为素数;

S\sqrt{S}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

标签:03,int,double,flag,sqrt,C语言,素数,整除
来源: https://blog.csdn.net/Albert992/article/details/105329723

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有