当前位置: 首页 > news >正文

C语言学习笔记20260519—如何判断输入的自然数是否为素数

如何判断输入的自然数是否为素数

1. 素数知识点

1)素数是大于 1,除了 1 和它自己,别的数都除不尽它的自然数 。
2)素数:只能被 1 和自己整除(因子数 = 2)
3)非素数:因子数 > 2 或 = 1

2.算法知识点

1)从i=1开始循环,判断输入的数num%i为0就是num的因子,而且因子是成对出现的。
2)循环条件是i小于等于num的平方根,比如16的成对因子为(1&4)、(2&8),(4&4)循环条件只用i=4就行;输入的是平方数,在计算因子数量时,需要因子对2-1,因为有一对因子是同样的数。
3)sqrt(num),如果要用sqrt必须要包含#include <math.h>,否则计算sqrt (3) 不会等于 1.732,编译器会把它当成 0 或者随机数。这样程序就会跑乱。可以用i
i <= num条件来代替。
4)程序分步设计思路:先循环过程中打印所有因子,并把因子存放在数组arr[]中(存放数组时一次存放一对因子,所以数字位号K循环一次需要+2),然后再打印数组跟循环过程中打印的因子对比,输出结果一样之后再用冒泡法从小到大排列数组并打印出来。

#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>//#include <math.h>intmain(){intnum=0;inti=0;intj=0;intk=0;inttemp=0;intcount=0;// 统计因子个数printf("请输入一个大于1的自然数:\n");scanf("%d",&num);intarr[1000];printf("\n");//素数是大于 1,除了 1 和它自己,别的数都除不尽它的自然数 。// 素数:只能被 1 和自己整除(因子数 = 2)//非素数:因子数 > 2 或 = 1// 1因字数只有1个,不是素数,输入合法性判断if(num<=1){printf("%d不是素数\n",num);return0;}printf("%d的因子数为:\n\n",num);// 只需循环到 sqrt(num),如果要用sqrt必须要包含#include <math.h>,否则sqrt (3) 不会等于 1.732,编译器会把它当成 0 或者随机数for(i=1;i*i<=num;i++)//等同 for (i = 1; sqrt(num); i++){if(num%i==0){count++;// 避免平方数重复计数,比如输入4,因子为(1&4)(2&2)2相同只能算一个,count不能在执行++//因子会成对出现,只不过平方出现是2个同样的数,因子数只能算一个if(i!=num/i){count++;j=num/i;printf("%d %d ",i,j);arr[k]=i;arr[k+1]=j;k=k+2;}else{printf("%d ",i);arr[k]=i;}}}printf("\n\n");printf("因子数组输出结果为:\n\n");//打印所有因子for(i=0;i<count;i++){printf("%d ",arr[i]);}printf("\n\n");//因子冒泡法从小到大排序for(i=0;i<count-1;i++){for(j=0;j<count-1-i;j++){// 前一个比后一个大,交换if(arr[j]>arr[j+1]){temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}//按从小到大循序打印所有因子printf("因子从小到大输出结果为:\n\n");for(i=0;i<count;i++){printf("%d ",arr[i]);}printf("\n\n");// 正确判断:素数的因子数量 == 2if(count==2){printf("%d的因字数只有%d个.\n\n",num,count);printf("%d 是素数\n",num);}else{printf("%d的因字数大于2个,总共有%d个.\n\n",num,count);printf("%d不是素数\n",num);}return0;}

3.输出结果

http://www.jsqmd.com/news/1068080/

相关文章:

  • OpencvSharp 算子学习教案之 - Cv2.DrawContours 重载1
  • 3A分子筛乙醇脱水的实验装置设计方案
  • 2026年第一、二季度最新最全热门网站建设工具全面对比评测
  • SpringCloud Alibaba Sentinel 限流+熔断完整实战教程
  • 电阻、电容、电感,二极管、三极管、mos管
  • 江科大PWM笔记:呼吸灯、舵机控制、电机调速
  • Linux 实时优化的端到端延迟:从中断到任务执行的全链路优化
  • 2026山东大学软件学院创新项目实训(团队——6)
  • 山东大学项目实训6月20日
  • 【编号317】西安城市边缘区土地利用数据
  • 计算机毕业设计之取保候审人员管理系统设计与实现
  • (一)站稳脚:用Scikit-learn跑通第一条Pipeline
  • SQL必知必会——使用游标
  • 【Springboot毕设全套源码+文档】基于springboot蛋糕店线上预订销售系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • TAP/TUN与自定义网络协议栈
  • c#软件开发学习笔记--Winform窗体第二期
  • NAT导致视频监控平台无法拉取视频流故障一例
  • 上下文窗口、KV Cache 与长上下文问题
  • Kubernetes 之资源对象 Pod详解
  • Celery 和 Apache Airflow 都可用于定时任务调度与全量数据批量分析,但定位、架构和适用场景有显著区别
  • Java 集合 - Java集合框架详解与应用
  • 毕业设计 深度学习yolo藻类细胞检测识别(科研辅助系统)(源码+论文)
  • pikachu详细通关教程
  • YOLO系列目标检测数据集大全【第四十一期】
  • 基于 Harmony 6.0 应用的乡村助农直播应用首页实现
  • UniLaViRA/HumanoidMimicGen/VERA/Tabero/S-Cheetah/FGO六大具身SOTA全网独家复现|零样本跨体导航/人形数据扩增/视频动作映射/触觉柔顺控力/仿生四足
  • 视频协议传输全解析:从 HTTP/HTTPS 到 HLS/DASH 的完整旅程
  • Java 集合 - 用好 SortedMap 和 NavigableMap,优化 Java 集合排序与操作效率
  • 后端常见问题
  • 继电器项目