第十课认识约数
课堂学习:
情景引入:
今天我们来认识一下数学中的约数关系,上节课我们了解完倍数之后就已经对约数有了基本的概念!
我们按照是否有余数,可以把他们分成两类
在整数除法中,如果商是整数没有余数,我们就说被除数是除数的倍数,除数是被除数的因数(约数)。 例如,12÷2=6,我们就说12是2的倍数,2是12的约数。 说一说第一类的每个算式中,谁是谁的约数?谁是谁的倍数?
做一做
下面的4组数中,谁是谁的约数?谁是谁的倍数?
约数的特征
18的因数有:1、2、3、6、9、18 一共6个
2的倍数有:2、4、6、...、12、14、16、...
5的倍数有:5、10、15、... 所以一个整数的因数是有限的,一个整数的倍数是无限多的
同学们可以找到24 的所有约数嘛?
绘制约数
我们希望向右画,所以开始可以让画笔向右转90° 然后转到起始位置(-300,0) 之后可以设置宽200,长100,初始颜色白色15
int main(){pen.rt(90).moveTo(-300,0);int chang,kuan,yanse;kuan=200,chang=100,yanse=15;return 0;
}
- 之后我们就可以用for循环来绘制2-9 一共8个长方形,所以编号可以从2开始到9结束
- 绘制时需要将质数编号的长方形更改成红色,所以需要在编号是质数时更改颜色变量的值,不是质数的时候要把颜色变量改回白色
- 需要注意我们绘制的时候需要先绘制实心长方形再绘制编号,否则长方形就会覆盖编号数字
int main(){pen.rt(90).moveTo(-300,0);int chang,kuan,yanse;kuan=200,chang=100,yanse=15;for(int i=2;i<10;i++){if(i==2||i==3||i==5||i==7){yanse=1;}else{yanse=15;}pen.rr(kuan,chang,yanse);pen.text(i,0);pen.up().fd(100).down();}return 0;
}
找因数
- 知道因数知识之后,我们可以来使用绘图找一下整数的所有因数
- 查找之前我们来学习c++中比较重要的一个算数运算类型:取余 %
- 取余操作,按字面意思来说就是获取到表达式的余数,即: 20%3 就是20÷3=6...2 的余数,即2 20%4 就是20÷4=5...0的余数,即0
- 余数定义
- 二元运算符 % 生成第一个操作数除以第二个操作数(在通常的算术转换之后)的余数。
- 余数的符号定义如下: 如果商 a/b 在结果类型中可表示,则 (a/b)*b + a%b == a. 如果第二个操作数为零,则行为未定义。
- 注意:余数运算符不适用于浮点类型,库函数 fmod 提供了该功能
课堂练习
知道取余运算之后我们就可以使用因数的定义来找到一个整数的所有因数了
- 在商是整数没有余数的情况下,除数就是被除数的因数,所以我们可以使用取余运算来判断一个数是否是另一个整数的因数,
- 例如: 12 % 4 = 0 取余运算结果是0,则表示4是12的一个因数 12 % 5 = 2 取余运算结果是2,则表示5不是12的一个因数
现在我们需要找一个整数的所有因数,那么就可以使用for 循环结构进行处理 从1 开始 到这个整数结束,如果取余运算结果是0,就绘制出这个因数
int a;
cin>>a;
for(int i=1;i<=a;i++){
if(a%i == 0){
pen.text(i);
pen.fd(100);
}
}
同学们可以使用画图实现找因数的任务
- 输入一个整数(小于50)
- 在当前位置画出这个整数
- 在距离100的下一行使用红色画出这个整数的所有因数,每两个因数间隔100距离
- 最后隐藏画笔
输入一个整数
int a;cin>>a;
pen.text(a);即可
第二行的因数需要向右绘制,所以我们可以先让画笔转向右边方向,如果其实位置是原点,可以直接让画笔移动到(0,-100)位置
int main(){int a;cin>>a;pen.rt(90).text(a).moveTo(0,-100);return 0;
}在距离100的下一行使用红色画出这个整数的所有因数,每两个因数间隔100距离
最后隐藏画笔
int main(){int a;cin>>a;pen.rt(90).text(a).moveTo(0,-100);for(int i=1;i<=a;i++){if(a%i == 0){pen.text(i,1);pen.up().fd(100).down();}} pen.hide();return 0;
}
课后作业
同学们课后可以尝试找一下30以内,哪个整数有最多的因数呢? 这个整数有多少个因数呢? 最好使用程序来进行判断哦