目录:
1、打印100-200素数
2、打印闰年
3、 给定两个数,求两个数的最大公约数
一、自己实现:
作业1:打印100-200之间的素数
素数:除了1和本身之外不能整除其他数的数字叫做素数;
/*
作业1: 打印出100-200之间的素数
思路:(1)打印出100-200之间的数字
(2) 判断数字是不是素数--》能不能被自身范围内的数字取余=0
====》
遍历自身数字长度,取余==0不是素数,不等于0是素数
*/
#include<stdio.h>
int main()
{
for (int i = 100;i < 200;i++)
{
int flag = 0;
for (int j = 2;j < i;j++)
{
if (i%j != 0) //==0 说明不是素数;不等于0,说明是素数
// 错误:4不是素数,在J=2的时候是不执行If语句的,但是j=3的时候就执行了If语句,改变了flag的值
{
flag = 1;
}
else
{
flag = 0;
break;//break;//加break 语句,一旦判断出有公约数,就跳出for循环,不再执行后续的判断
}
}
if ( flag ==1)
{
printf("%d\n", i); //打印出来 非素数
}
}
}
//一直想用返回数组的形式实现,一直不可行
//单独写出来函数
#include<stdio.h>
int isPrimeNumber(int i)
{
int flag = 0;
for (int j = 2;j < i;j++)
{
if (i%j != 0)
{
flag = 1;
}
else
{
flag = 0;
break;
}
}
if (flag ==1)
{
return 1;
}
}
int main()
{
for (int num = 100; num < 200; num++)
{
if (isPrimeNumber(num) == 1)
{
printf("%d\n", num);
}
}
}
作业2:打印1000-2000年之间闰年
闰年:能被4整除但不能被100整除或者能被400整除的数字是闰年。
/*
作业2:打印1000-2000年之间闰年
*/
/*
#include<stdio.h>
void main()
{
for (int year = 1000; year < 2000;year++)
{
if ((year %4==0 && year %100 !=0)|| (year % 400 ==0))
{
printf("%d\n", year);
}
}
}
*/
作业3:给定两个数,求两个数的最大公约数
#include<stdio.h>
int min(int x,int y) //这里不能再写a,b,要换一个字母表示
{
if (x < y)
{
return x;
}
return y;
}
int main()
{
int commonMeasure = 0;
int a = 14;
int b = 72;
int minValue = min(a, b);
for (int i = 1; i <= minValue ; i++)
{
if (a % i==0 && b %i ==0)
{
commonMeasure = i;
}
}
printf("%d\n", commonMeasure);
}
二、改进版本
作业1:另外的方法,感觉还是很繁琐
//#include<stdio.h>
//int main()
//{
// int i = 0;
// int count = 0;
//
// // 外层循环用来获取100~200之间的所有数据,100肯定不是素数,因此i从101开始
// for (i = 5; i <= 10; i++)
// {
// //判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数
// int j = 0;
// for (j = 2; j < i; j++)
// {
// if (i%j == 0)
// {
// break;//有公约数,立刻跳出当前循环
// }
// }
// // 上述循环结束之后,如果j和i相等,说明[2, i)之间的所有数据都不能被i整除,则i为素数
// if (j == i)
// {
// count++;
// printf("%d ", i);
// }
// }
// printf("\ncount = %d\n", count);
// return 0;
//}
作业3:辗转相除法是用来求两个整数的最大公约数的。
过程:(1)先用大数除去小数得到余数,若余数为0则除数为最大公约数;
(2)余数不为0则将上一轮的除数作为被除数,余数作为除数,再判断余数:若为0 则除数为最大公约数,否则重复上述操作,直到余数为0,则最后一个除数就是最大公约数。
eg:18和24的最大公约数
第一次:a= 18,b =24, c=24%18=6
第二次:6%24 =6
第三次:6%6=0,最大公约数是6
//#include<stdio.h>
//
//void main()
//{
// int a = 120;
// int b = 38;
// int c = 0;
//
// do//被除数÷除数=商
// {
// c = b % a; //求余数
// b = a; //除数作为被除数
// a = c; //余数作为除数
// } while (c != 0);//余数c不为0则继续执行循环
// printf("%d\n", b);
//}