当前课程知识点:C语言程序设计(上) > 循环结构的程序设计(一) > 4.4 循环控制——简单循环应用 > 4.4.2--循环的应用-求素数
大家好
我们下面再看几道例题
第一个是判断素数
大家知道
素数
是什么数呢
就是能够被
1和它本身整除之外
再也不能被任何数整除了
这就是素数
比如说
7
能被1整除
能被7整除
这个过程还能被
2 3 4 5 6里边的
任何一个数整除吗
不能啦
那7一定是个素数
比如说15
能够被1和15整除
它还能被谁整除
能被3整除
能被5整除
那它一定不是素数了
都不用判断5
到3就为止了
只要能被一个数整除
除过它自身和1之外
任何一个数整除
它就不是素数了
那我们大家看
在判断任何一个数
它是不是素数的时候
它的游戏规则一定是
从2开始的
你输进来一个数
我从2开始
除以2
能整除吗
如果能
3都不用试啦
这个数就不是素数了
如果不能再除以3
除以4
一直如果到了
你输的那个数前面那个数
都不能整除
这就是我们要的那个素数
大家看程序是不是这样
先scanf
读你这个数进来
然后呢
进入循环
我们用for构建这个循环
是因为
它的初值
终值
和不常值
都是非常清楚的
从2开始
到谁呢
到你输进来的那个数的前边那个数
所以也就是小于
你读的是 n
那循环控制变量i小于n
就可以了
增量呢
每步增量1呀
增量1
所以它是非常适合用for
去构建这个循环的
那在循环体里边做什么呢
只要做一件事
你读进来的n
除以当前的i
能整除吗
就是求余
余数是0吗
如果是0就整除了
如果整除了
我们做了一件什么事
把0赋值给
isPrime
isPrime是什么呢
是我们开始定义的一个整型的变量
给它赋的初值是1
如果在循环体里边
它被赋值过0
那就说明
它有能被整除的数
那这个数就不是素数了
否则
一直到循环完
它们都没有被改变过
isPrime
没有被改变过
那说明这个数就是素数了
所以呢
循环结束了以后
我们只要判断
if
if里边呢
ifPrime是真的吗
如果是真的
那就说明它没有被改变过
循环里边没有改变过它的值
它就是素数
否则
它不是素数
底下的判断
只是判断
isPrime里边是
1还是0
是真的还是假的
是真的
就是素数
否则它就不是素数
大家可以把这个程序
拿过去自己运行一下
因为关于素数
怎么求素数
网上
书上
都有
因为是很经典的一个问题
大家下去自己可以
调试一下
我们下边再看
一道题目
是大数分解
什么叫大数分解
所谓若干因子
是什么呢
其实也就是说
你把这个数分解成
若干素数的乘积
比如说
我们还说15
那15
能等于
它的因子都是谁呢
除过
15能被谁整除呢
我们也是从2开始
15除以2
能整除吗
不能整除
15再除以
往后除以3
能整除啦
那15这个数
3就是它的一个因子
再除以4
能整除吗
不能
那除以5能整除吗
能
那5就是它的一个因子
那再往后找6 7 8
都没有了
那15这个数
它的因子是谁呢
3和5
那我们任何一个大数
都可以分解成
若干个这样的因子的
乘积
那我们说
最主要的这里边说 什么是因子
其实
我们前面讨论过素数
其实
任何一个数
可以分解成
若干个素数的乘积
因子也就是说
能被整除的那些数
都是这个数的因子
就这个数
都能被谁整除呢
凡是被能整除的那些数
都是它的因子
那这个数就是它
这些因子的乘积
这程序因为很简单
我们从键盘上获取这个数
然后呢
一定不是从1开始的
大于1
那我们就是从2开始的
然后呢
判断的条件是什么呢
你这个a
不等于1吗
因为我们要大于1呀
不能等于1
只要不等于1
我就进入这个循环
在循环体里边做什么呢
我先拿你送的这个数
和我当前的循环控制变量
我的控制变量是从2开始的
当前这个数
是2
就是问
2是它的约数吗
那你输入的这个数
键盘上敲进来这个数
与2去求余
你的余
是没有余数吗
没有余数就是能整除啦
那好的
那你
整除的这个数是多少呢
把这个除下来
给了a
我现在要的就是你
当前的循环控制变量
这就是你那个约数
那这一步是做什么呢
找下一个
你要做的那个数
那循环回来时a是我的
判断
到这
你现在的a
还没到1吗
比如说我
输入的a是100的话
那我刚才才做了
这个a除以这个i
那是50啊
50不等于1吗
当然是啦
再往下做
50当然不等于100啦
依次循环
我们到这
把所有是约数的打印出来
否则
你就不打印
这个否则跟谁对着呢
跟if
否则
你就把这个i
循环控制变量往上涨一个
就可以了
这道题也很简单
大家下去自己可以运行一下
运行 调试
并且在里边也可以做一些改变
-1.1 计算机的问题求解方法
--讨论题:数学模型
-1.1 计算机的问题求解方法--作业
-1.2 C语言与C程序
--讨论题:运算符
-1.3 C语言处理系统与程序调试运行
--例程
-1.4 程序中的人机交互
--例程
--作业讨论区
-2.1 算术运算的C程序实现
--算术混合运算.c
-2.1 算术运算的C程序实现--作业
-2.2 关系运算的C程序实现
--bukao.c
--字符比较.c
--讨论题:比较大小
-2.2 关系运算的C程序实现--作业
-第二周作业--作业
-2.3 逻辑运算的C程序实现
--计算结合性
--闰年.c
--自动购票问题.c
-2.3 逻辑运算的C程序实现--作业
-2.4 位运算的C程序实现
--讨论题:位运算
-2.5 几种很个别的运算
--讨论题
--讨论题
-2.5 几种很个别的运算--作业
-2.6 混合运算及数据类型转换
--讨论题:数据类型
-2.7 顺序结构程序实例
--Video
--三角形面积.c
--讨论题:工业产值
-2.7 顺序结构程序实例--作业
-3.1 程序中的路径选择实现
--打印学生成绩.c
--一元二次方程.c
-3.1 程序中的路径选择实现--作业
-3.2 路径中的再选择——嵌套判断
--例程
--讨论题:程序改错
-3.2 路径中的再选择——嵌套判断--作业
-3.3 复杂判断问题的C程序设计
--3.3 多级选择
--银行存款.c
--讨论题:多级选择
-3.4 多分支问题的C程序设计
--加减乘除运算.c
-3.4 多分支问题的C程序设计--作业
-3.5 GOTO的适当使用
-3.6 选择结构的程序实例
--3.6 程序展示
--计算第几天.c
--讨论题:输出奇数
--讨论题:计算税金
-3.6 选择结构的程序实例--作业
-第四周作业--作业
-4.1 需要重复执行的程序
--求和.c
--打印学生成绩.c
--统计录入速度.c
--求平均数.c
-4.1 需要重复执行的程序--作业
-4.2 至少要执行一次的循环
--n的阶乘.c
--字符分类统计.c
-4.2 至少要执行一次的循环--作业
-4.3 已知循环次数用for语句
--求和问题.c
--数列求和.c
--讨论题:循环语句
-4.3 已知循环次数用for语句--作业
-4.4 循环控制——简单循环应用
--水仙花数.c
--讨论题:死循环
--讨论题:猜数字
-循环结构的程序设计(一)--4.4 循环控制——简单循环应用
-4.5 循环的嵌套
--讨论题:程序运行
-4.5 循环的嵌套--作业
-4.6 break与continue
--最大素数.c
-4.6 break与continue--作业
-4.7 循环的综合应用
--数的排列组合.c
--鸡兔同笼.c
--打印空心字符.c
--讨论题:打印图形
--讨论题:计算闰年
-第六周作业
-第六周作业--作业
-5.1 同类有序数据处理问题
-5.2 一维数组的定义和引用
--数组定义.c
--数组初始化.c
--反向输出.c
--讨论题:对称数
-5.2 一维数组的定义和引用--作业
-5.3 一维字符串数组
--讨论题:编程
-5.4 字符串处理函数
--字符串反向.c
--字符串函数
-5.5 二维数组的定义与使用
-5.6 二维数组的输入输出
-5.6 二维数组的输入输出--作业
-5.7 二维数组的应用
--转置矩阵.c
--讨论题:修改程序
-5.8 二维字符数组
--5.8 单词排序
--单词排序.c
-5.8 二维字符数组--作业
-5.9 数组综合应用
--统计成绩.c
--统计字符次数.c
--讨论题:洗牌
-本期课程结束语
--end
-第八周编程作业
-《C语言程序设计(上)》期末复习参考
--html
-《C语言程序设计(上)》期末复习参考答案
--html