学C的第八天(完成猜字谜游戏复习之前的内容;了解goto转向语句;补充知识点;练习,学习试除法和辗转相除法)-2

简介: 3.写一个代码,打印100-200之间的素数:(新思路:试除法) (判断i是否为素数:用 2到i-1 之间的数字去试除 i,如果能整除则i不是素数)

image.png3.写一个代码,打印100-200之间的素数:(新思路:试除法

(判断i是否为素数:用 2到i-1 之间的数字去试除 i,如果能整除则i不是素数

// 打印100 - 200之间的素数
// 素数 - 质数
// 只能被1和它本身整除的数是质数
// 判断i是否为素数:用 2到i-1 之间的数字去试除 i,如果能整除则i不是素数
// 2到i-1 之间的数字 都不能整除i,则i是素数
#include <stdio.h>
int main()
{
  int i = 0;
  for ( i = 100; i <= 200; i++) //生成100 - 200之间的素数
  {
    // 判断i是否为素数
    // 循环产生 2到i-1
    int j = 0;
    int flag = 1; // flag=1 则 i是素数
    for ( j = 2; j <= i - 1; j++) // 这个循环产生的就是 2到i-1 的数
      //    2  到   i - 1 (用<=)
    {
      if (i % j == 0) // 用i模上一个j,看j能不能整除i,有余数则表示不能整除
      {
        flag = 0; // flag=0 则 i不是素数
        break; 
        // 有一个j把i整除了,说明i已经不是素数了,所以不用再循环了,break跳出循环
      }
    }
    if (flag == 1) // 到这里说明i是素数,把它打印出来
    {
      printf("%d  ", i);
    }
  }
  return 0;
}

image.png

(因为偶数除了2都不是素数,且题目范围中没有2,所以可以只生成100 - 200之间的奇数,可以排除一半的数字,效率提升一倍)

// 打印100 - 200之间的素数
// 素数 - 质数
// 只能被1和它本身整除的数是质数
// 判断i是否为素数:用 2到i-1 之间的数字去试除 i,如果能整除则i不是素数
// 2到i-1 之间的数字 都不能整除i,则i是素数
#include <stdio.h>
int main()
{
  int i = 0;
  for ( i = 101; i <= 200; i+=2) //生成100 - 200之间的素数
  {
    // 判断i是否为素数
    // 循环产生 2到i-1
    int j = 0;
    int flag = 1; // flag=1 则 i是素数
    for ( j = 2; j <= i - 1; j++) // 这个循环产生的就是 2到i-1 的数
      //    2  到   i - 1 (用<=)
    {
      if (i % j == 0) // 用i模上一个j,看j能不能整除i,有余数则表示不能整除
      {
        flag = 0; // flag=0 则 i不是素数
        break; 
        // 有一个j把i整除了,说明i已经不是素数了,所以不用再循环了,break跳出循环
      }
    }
    if (flag == 1) // 到这里说明i是素数,把它打印出来
    {
      printf("%d  ", i);
    }
  }
  return 0;
}


image.png

image.png

(一个数:k, 如果有 k = m * n, 那么一定有m或n小于根号k ,那么可以之前的 2到i-1 换成 sqrt(i),即根号i。进一步提高效率)

// 打印100 - 200之间的素数
// 素数 - 质数
// 只能被1和它本身整除的数是质数
// 判断i是否为素数:用 2到i-1 之间的数字去试除 i,如果能整除则i不是素数
// 2到i-1 之间的数字 都不能整除i,则i是素数
#include <stdio.h>
#include <math.h>
int main()
{
  int i = 0;
  for ( i = 101; i <= 200; i+=2) //生成100 - 200之间的素数
  {
    // 判断i是否为素数
    // 循环产生 2到i-1
    int j = 0;
    int flag = 1; // flag=1 则 i是素数
    for ( j = 2; j <= sqrt(i); j++) // 这个循环产生的就是 2到i-1 的数
      //    2  到   i - 1 (用<=) 
      //sqrt 是库函数,是开平方的意思 ,需要头文件<math.h>
      //sqrt(i)就是对i开平方
    {
      if (i % j == 0) // 用i模上一个j,看j能不能整除i,有余数则表示不能整除
      {
        flag = 0; // flag=0 则 i不是素数
        break; 
        // 有一个j把i整除了,说明i已经不是素数了,所以不用再循环了,break跳出循环
      }
    }
    if (flag == 1) // 到这里说明i是素数,把它打印出来
    {
      printf("%d  ", i);
    }
  }
  return 0;
}

image.png

4. 给定两个数,求这两个数的最大公约数:(新思路:辗转相除法)

思路:用两数中的较小值除以较大值,能整除则较小值就是最大公约数不能整除较小值自减1直到能整除,此时较小值就是最大公约数

//给定两个数,求这两个数的最大公约数: 
#include <stdio.h>
int main()
{
  int m = 0;
  int n = 0;
  scanf("%d %d", &m, &n); // 18 24
  //计算
  int k = (m > n ? n : m); // 找出较小值
  // 使用 条件操作符(三目操作符)条件成立把n赋给k,反之把m赋给k
  while (1)
  {
    if (m % k == 0 && n % k == 0) // 使两个数都能被较小值整除
    {
      break; // 都能被整除则停止
    }
    k--; // 不能整除则较小值自减,再次循环,直到两个数都能被较小值整除
  }
  printf("%d\n", k);
  return 0;
}


image.png

辗转相除法:)

//给定两个数,求这两个数的最大公约数: 
#include <stdio.h>
int main()
{
  int m = 0;
  int n = 0;
  scanf("%d %d", &m, &n); // 18 24
  //计算
  int k = 0;
  while (k = m % n) // 求余数,当余数为0后停止循环,此时,n为最大公约数
  {
    m = n; // 除数赋给被除数
    n = k; // 余数赋给除数
    // 赋值后再求余数,直到余数为0
  }
  printf("%d\n", n);
  return 0;
}

b4af687635154064a9076169d1022b82.png 

相关文章
|
1月前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
47 0
|
4月前
|
机器学习/深度学习
《信号分析与处理》期末复习题库整理(题目+手写知识点+答案+期末知识点精细)(一)
《信号分析与处理》期末复习题库整理(题目+手写知识点+答案+期末知识点精细)(一)
|
4月前
《信号分析与处理》期末复习题库整理(题目+手写知识点+答案+期末知识点精细)(二)
《信号分析与处理》期末复习题库整理(题目+手写知识点+答案+期末知识点精细)(二)
|
C语言
学C的第八天(完成猜字谜游戏复习之前的内容;了解goto转向语句;补充知识点;练习,学习试除法和辗转相除法)-1
复习之前学C的内容: 猜数字游戏: 1. 电脑会随机生成一个数 2. 猜数字: a> 猜大了,提醒猜大了,继续猜 b> 猜小了,提醒猜小了,继续猜 c> 猜对了,恭喜你,猜对了,结束游戏 3. 玩完一把不过瘾可以继续玩,不用退出程序
|
C++
AcWing语法基础课笔记 第二章 printf语句与C++中的判断结构
学习语言最好的方式就是实践,每当掌握一个新功能时,就要立即将这个功能应用到实践中。 ——闫学灿
101 0
(思维)(必要做题步骤)(皮卡丘与 Codeforces )D - 先来签个到
(思维)(必要做题步骤)(皮卡丘与 Codeforces )D - 先来签个到
102 0
|
算法 数据安全/隐私保护 C语言
【C初阶】第三篇——分支和循环练习题(猜数字游戏+关机恶搞+模拟用户登录)
【C初阶】第三篇——分支和循环练习题(猜数字游戏+关机恶搞+模拟用户登录)
|
Java
java学习第四天笔记-循环高级和数组92-猜数字小游戏
java学习第四天笔记-循环高级和数组92-猜数字小游戏
68 0
java学习第四天笔记-循环高级和数组92-猜数字小游戏
【期末复习笔记】数字逻辑
8421BCD码、格雷码、余三码进制之间的转换,数字逻辑第一章笔记复习记录
254 0
【期末复习笔记】数字逻辑