【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】

目录😋

任务描述

相关知识

一、循环控制 / 跳转语句的使用

1. 循环控制语句(for 循环)

2. 循环控制语句(while 循环)

3. 跳转语句(break 语句)

4. 跳转语句(continue 语句)

二、算术运算符(%)

1. 基本概念

2. 运算规则

3. 在程序中的应用场景

三、素数的概念

1. 定义

2. 最小的素数

3. 素数的分布规律

4. 素数的应用

编程要求

测试说明

通关代码

测试结果


任务描述

本关任务:编写一个判断是否素数的子函数,在主函数中输入一个整数,并输出是否为素数的信息。


相关知识

为了完成本关任务,你需要掌握:

  1. 循环控制 / 跳转语句的使用
  2. 算术运算符(%)
  3. 素数的概念

一、循环控制 / 跳转语句的使用

1. 循环控制语句(for 循环)
  • 基本原理for循环是一种常用的循环结构,它允许您指定一个初始化表达式、一个循环条件和一个更新表达式。语法格式为for(初始化表达式; 循环条件; 更新表达式)。初始化表达式在循环开始时执行一次,用于初始化循环变量。循环条件在每次循环迭代开始时进行检查,如果为真,则执行循环体中的代码。更新表达式在每次循环体执行完后执行,用于更新循环变量。
  • 示例代码
    #include <stdio.h>
    int main() {
        // 打印1到10的数字
        for (int i = 1; i <= 10; i++) {
            printf("%d ", i);
        }
        printf("\n");
        return 0;
    }
    
2. 循环控制语句(while 循环)
  • 基本原理while循环在循环开始时检查循环条件。只要条件为真,就会执行循环体中的代码。语法格式为while(循环条件)。循环条件是一个表达式,它返回一个布尔值(真或假)。在循环体中,通常需要包含一些能够改变循环条件的语句,否则可能会导致无限循环。
  • 示例代码
    #include <stdio.h>
    int main() {
        int i = 1;
        while (i <= 10) {
            printf("%d ", i);
            i++;
        }
        printf("\n");
        return 0;
    }
    
3. 跳转语句(break 语句)
  • 基本原理break语句用于立即跳出当前循环(forwhiledo - while)或switch语句。当程序执行到break语句时,循环或switch语句会立即终止,程序控制流将跳转到循环或switch语句后的下一条语句。
  • 示例代码(在循环中使用 break)
    #include <stdio.h>
    int main() {
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                break;
            }
            printf("%d ", i);
        }
        printf("\n");
        return 0;
    }
    
4. 跳转语句(continue 语句)
  • 基本原理continue语句用于跳过当前循环迭代的剩余部分,直接开始下一次循环迭代。当程序执行到continue语句时,循环体中continue语句之后的代码将不会被执行,而是直接跳转到循环的更新表达式(对于for循环)或循环条件检查(对于whiledo - while循环)。
  • 示例代码(在循环中使用 continue)
    #include <stdio.h>
    int main() {
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                continue;
            }
            printf("%d ", i);
        }
        printf("\n");
        return 0;
    }

二、算术运算符(%)

1. 基本概念
  • 在 C 语言中,%是取余运算符,也称为模运算符。它用于计算两个整数相除后的余数。例如,表达式a % b的结果是a除以b后的余数。余数的取值范围是从 0 到b - 1(假设b是正数)。
  • 例如,7 % 3的结果是 1,因为 7 除以 3 商为 2,余数为 1;9 % 3的结果是 0,因为 9 能被 3 整除,余数为 0。
2. 运算规则
  • 取余运算要求两个操作数必须是整数类型,包括charshortintlong等基本整数类型。如果操作数是浮点数,在 C 语言中是不允许直接进行%运算的。
  • 运算结果的符号与被除数(%左边的数)相同。例如,-7 % 3的结果是 -1,因为 -7 除以 3 商为 -2,余数为 -1;7 % -3的结果是 1,因为 7 除以 -3 商为 -2,余数为 1。
3. 在程序中的应用场景
  • 判断整除关系:在判断一个数是否能被另一个数整除时非常有用。如前面判断素数的代码中,if (a % 2 == 0)用于判断a是否能被 2 整除。如果余数为 0,就表示能整除。这是一种常见的用法,通过判断余数是否为 0 可以确定两个数之间的整除特性。
  • 循环分组:在一些需要按照一定周期或分组进行操作的程序中也经常用到。例如,要将 1 到 100 的数按照每 10 个一组进行输出,可以利用%运算符来判断。以下是一个简单的示例代码:
    #include <stdio.h>
    int main() {
        for (int i = 1; i <= 100; i++) {
            printf("%d ", i);
            if (i % 10 == 0) {
                printf("\n");
            }
        }
        return 0;
    }
    
  • 哈希函数和数据结构中的应用在一些数据结构如哈希表中,%运算符常用于计算哈希值。例如,假设有一个简单的哈希函数,用于将一个整数键值映射到一个哈希表的索引位置,哈希表的大小为m,可以使用key % m来计算键值key对应的哈希表索引。这样可以将不同的键值相对均匀地分布到哈希表的各个位置,提高数据存储和查找的效率。当然,实际的哈希函数可能会更复杂,但%运算符是其中一种简单的实现方式。

三、素数的概念

1. 定义
  • 素数(质数)是指在大于 1 的自然数中,除了 1 和它自身外,不能被其他自然数整除的数。例如,2、3、5、7、11 等都是素数。
  • 与之相对的概念是合数,合数是指除了能被 1 和本身整除外,还能被其他数(0 除外)整除的自然数。比如 4(能被 1、2、4 整除)、6(能被 1、2、3、6 整除)、8 等都是合数。
2. 最小的素数
  • 最小的素数是 2。因为 2 大于 1,且只能被 1 和 2 整除。它是唯一的偶素数,其他偶数都至少能被 2 整除,所以不是素数。
3. 素数的分布规律
  • 素数在自然数中的分布是没有明显规律的。随着数字的增大,素数的分布变得越来越稀疏。例如,在较小的数字范围内,素数出现的频率相对较高,在前 10 个自然数中(2 - 10),有 4 个素数(2、3、5、7),占比 40%。但是当数字范围扩大到 1 - 100 时,素数有 25 个,占比 25%。
  • 有许多数学家一直在研究素数的分布规律,如著名的素数定理。素数定理大致描述了素数分布的渐近行为,它指出当整数n趋向于无穷大时,不超过n的素数的个数与n/ln(n)ln(n)表示n的自然对数)近似相等。不过这只是一种渐近估计,实际的素数分布仍然存在许多复杂的情况。
4. 素数的应用
  • 密码学:素数在现代密码学中具有极其重要的地位。例如在 RSA 公钥加密算法中,加密和解密过程都依赖于大素数的特性。RSA 算法的安全性基于一个数学事实:分解两个大素数的乘积是非常困难的。具体来说,密钥的生成涉及到找到两个足够大的素数(例如长度为 1024 位或 2048 位的二进制数),通过对这两个素数进行一系列数学运算来生成公钥和私钥。

  • 哈希函数:在一些哈希算法的设计中,素数也有应用。例如,为了减少哈希冲突(不同的数据产生相同的哈希值),哈希表的大小通常选择素数。这是因为在取余运算(哈希函数常用的操作)中,使用素数作为除数可以使数据分布更加均匀,减少冲突的概率。
  • 数学理论研究:素数是数论等数学分支的核心研究对象。许多数学猜想和定理都与素数有关,如哥德巴赫猜想(任何一个大于 2 的偶数都可以表示为两个素数之和),虽然这个猜想尚未被完全证明,但数百年间吸引了无数数学家的研究,推动了数学理论的发展。

编程要求

根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。


测试说明

平台会对你编写的代码进行测试:

测试输入:

123

预期输出:

123不是一个素数

 测试输入:

311

预期输出:

311是一个素数

开始你的任务吧,祝你成功!


通关代码

#include<stdio.h>
int main()
{
   int isPrime(int a);
   int a;
  //请在此添加代码
/*********Begin*********/
scanf("%d",&a);
if(isPrime(a)==0)
printf("%d不是一个素数",a);
else printf("%d是一个素数",a);
return 0;
}
/********* End *********/
int isPrime(int a) 
{
   if(a<=1) return 0;
   for(int b=2;b<a;b++)
 //请在此添加代码
/*********Begin*********/
{
  if(a%b==0) return 0;
}
return 1;
/********* End *********/
}

测试结果

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rossy Yan

你的鼓励是我创作的最大动力😋

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值