求最大公约数、最小公倍数、

迈不过友情╰ 2023-10-08 16:52 146阅读 0赞

一、求两个数的最大公约数

解法一:
在这里插入图片描述

  1. int main()
  2. {
  3. int a = 0;
  4. int b = 0;
  5. scanf("%d%d", &a, &b);
  6. int min = (a > b) ? b : a;//18 24
  7. int m = 0;
  8. //假设m就是最大公约数
  9. for (m = min; m >= 1; m--)
  10. {
  11. if (a % m == 0 && b % m == 0)
  12. {
  13. break;
  14. }
  15. }
  16. printf("最大公约数是:%d\n", m);
  17. return 0;
  18. }

解法二:辗转相除法
在这里插入图片描述

  1. int main()
  2. {
  3. int a = 0;
  4. int b = 0;
  5. scanf("%d%d", &a, &b);
  6. while (a % b != 0)
  7. {
  8. int c = a % b;
  9. a = b;
  10. b = c;
  11. }
  12. printf("最大公约数为: %d\n",b);
  13. return 0;
  14. }

二、求两个数的最小公倍数

在这里插入图片描述

  1. //给定两个数,求这两个数的最小公倍数
  2. int main()
  3. {
  4. int a = 0;
  5. int b = 0;
  6. scanf("%d%d", &a, &b);
  7. int max = a > b ? a : b;
  8. int m = 0;//假设m是a,b的最小公倍数
  9. for (m = max; m >= max; m++)
  10. {
  11. if (m % a == 0 && m % b == 0) {
  12. break;
  13. }
  14. }
  15. printf("最小公倍数为:%d\n",m);
  16. return 0;
  17. }

三、求1000-2000年之间的闰年

首先要知道什么是闰年:
普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。
世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。
什么是闰年

  1. int main()
  2. {
  3. int year = 0;
  4. int cont = 0;
  5. for (year = 1000; year <= 2000; year++)
  6. {
  7. /*if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
  8. {
  9. printf("%d ", year);
  10. cont++;
  11. }*/
  12. if (year % 4 == 0)
  13. {
  14. if (year % 100 != 0)
  15. {
  16. printf("%d ", year);
  17. cont++;
  18. }
  19. }
  20. if (year % 400 == 0)
  21. {
  22. printf("%d ", year);
  23. cont++;
  24. }
  25. }
  26. printf("\ncont = %d\n",cont);
  27. return 0;
  28. }

四、判断100-200之间的素数

1、素数又叫质数。素数,指的是“大于1的整数中,只能被1和这个数本身整除的数”。

2、素数也可以被等价表述成:“在正整数范围内,大于1并且只有1和自身两个约数的数”。
什么是素数
在这里插入图片描述

  1. int main()
  2. {
  3. int cont = 0;
  4. int i = 0;
  5. //产生100-200之间的数
  6. for (i = 101; i <= 200; i++)
  7. {
  8. //用产生的数 除以比它本身小1的数(从2开始)
  9. //比如:101 你只能从2开始除到100
  10. int j = 0;
  11. int flag = 0; //如果flag=0,那i就是素数,flag是1,i不是素数
  12. for (j = 2; j < i - 1; j++)
  13. {
  14. //试除法 如果i % j == 0 说明j能被i整除,那i就不是素数
  15. if (i % j == 0)
  16. {
  17. flag = 1;
  18. break;
  19. }
  20. }
  21. if (flag == 0)
  22. {
  23. printf("%d ",i);
  24. cont++;
  25. }
  26. }
  27. printf("\ncont = %d",cont);
  28. return 0;
  29. }

优化1:
在这里插入图片描述

  1. #include<math.h>
  2. int main()
  3. {
  4. int cont = 0;
  5. int i = 0;
  6. //产生100-200之间的数
  7. for (i = 101; i <= 200; i++)
  8. {
  9. int j = 0;
  10. int flag = 0; //如果flag=0,那i就是素数,flag是1,i不是素数
  11. for (j = 2; j <= sqrt(i); j++)
  12. {
  13. //试除法 如果i % j == 0 说明j能被i整除,那i就不是素数
  14. if (i % j == 0)
  15. {
  16. flag = 1;
  17. break;
  18. }
  19. }
  20. if (flag == 0)
  21. {
  22. printf("%d ",i);
  23. cont++;
  24. }
  25. }
  26. printf("\ncont = %d",cont);
  27. return 0;
  28. }

优化2:在原来判断数当中减少判断的数量
在这里插入图片描述

  1. #include<math.h>
  2. int main()
  3. {
  4. int cont = 0;
  5. int i = 0;
  6. //产生100-200之间的数
  7. for (i = 101; i <= 200; i+=2)
  8. {
  9. int j = 0;
  10. int flag = 0; //如果flag=0,那i就是素数,flag是1,i不是素数
  11. for (j = 2; j <= sqrt(i); j++)
  12. {
  13. //试除法 如果i % j == 0 说明j能被i整除,那i就不是素数
  14. if (i % j == 0)
  15. {
  16. flag = 1;
  17. break;
  18. }
  19. }
  20. if (flag == 0)
  21. {
  22. printf("%d ",i);
  23. cont++;
  24. }
  25. }
  26. printf("\ncont = %d",cont);
  27. return 0;
  28. }

发表评论

表情:
评论列表 (有 0 条评论,146人围观)

还没有评论,来说两句吧...

相关阅读

    相关 公约数公倍数

    最大公约数(GCD)是指两个或多个整数共有的最大因数,而最小公倍数(LCM)是指两个或多个整数共有的最小倍数。 要求两个整数的最大公约数和最小公倍数,可以使用欧几里得算法。