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

C语言学习笔记20260519—如何判断输入的自然数是否为素数 如何判断输入的自然数是否为素数1. 素数知识点1素数是大于 1除了 1 和它自己别的数都除不尽它的自然数 。2素数只能被 1 和自己整除因子数 23非素数因子数 2 或 12.算法知识点1从i1开始循环判断输入的数num%i为0就是num的因子而且因子是成对出现的。2循环条件是i小于等于num的平方根比如16的成对因子为14、28,44循环条件只用i4就行输入的是平方数在计算因子数量时需要因子对2-1因为有一对因子是同样的数。3sqrt(num),如果要用sqrt必须要包含#include math.h否则计算sqrt (3) 不会等于 1.732编译器会把它当成 0 或者随机数。这样程序就会跑乱。可以用ii num条件来代替。4程序分步设计思路先循环过程中打印所有因子并把因子存放在数组arr[]中存放数组时一次存放一对因子所以数字位号K循环一次需要2然后再打印数组跟循环过程中打印的因子对比输出结果一样之后再用冒泡法从小到大排列数组并打印出来。#define_CRT_SECURE_NO_WARNINGS#includestdio.h//#include math.hintmain(){intnum0;inti0;intj0;intk0;inttemp0;intcount0;// 统计因子个数printf(请输入一个大于1的自然数\n);scanf(%d,num);intarr[1000];printf(\n);//素数是大于 1除了 1 和它自己别的数都除不尽它的自然数 。// 素数只能被 1 和自己整除因子数 2//非素数因子数 2 或 1// 1因字数只有1个不是素数输入合法性判断if(num1){printf(%d不是素数\n,num);return0;}printf(%d的因子数为\n\n,num);// 只需循环到 sqrt(num),如果要用sqrt必须要包含#include math.h否则sqrt (3) 不会等于 1.732编译器会把它当成 0 或者随机数for(i1;i*inum;i)//等同 for (i 1; sqrt(num); i){if(num%i0){count;// 避免平方数重复计数比如输入4因子为14222相同只能算一个count不能在执行//因子会成对出现只不过平方出现是2个同样的数因子数只能算一个if(i!num/i){count;jnum/i;printf(%d %d ,i,j);arr[k]i;arr[k1]j;kk2;}else{printf(%d ,i);arr[k]i;}}}printf(\n\n);printf(因子数组输出结果为\n\n);//打印所有因子for(i0;icount;i){printf(%d ,arr[i]);}printf(\n\n);//因子冒泡法从小到大排序for(i0;icount-1;i){for(j0;jcount-1-i;j){// 前一个比后一个大交换if(arr[j]arr[j1]){temparr[j];arr[j]arr[j1];arr[j1]temp;}}}//按从小到大循序打印所有因子printf(因子从小到大输出结果为\n\n);for(i0;icount;i){printf(%d ,arr[i]);}printf(\n\n);// 正确判断素数的因子数量 2if(count2){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.输出结果