C语言质数判断代码中for循环及p变量逻辑的相关疑问
C语言质数检测代码逻辑详解
首先附上完整可运行代码:
#include <stdio.h> int main() { int n,f; printf(""); scanf("%d",&n); int p=0; for (f=1;f<=n;f++) { if (n%f==0) { p=p+1; } } if (p==2) { printf("prime"); } else { printf("not prime"); } return 0; }
逻辑设计依据
所有变量和判断的设计都基于质数的基础定义:大于1的自然数中,只能被1和它本身整除的数为质数,也就是说质数的正因数数量恰好为2个。
各部分语句含义
变量p相关操作
int p=0:p是统计输入数字n的正因数个数的计数器,初始值设为0,代表统计前的初始计数为0p=p+1:每次找到一个能整除n的正整数(即n的因数),就将计数器加1,累计因数总数量p==2:判断统计得到的因数总数是否恰好为2,符合质数的定义,满足条件则说明n是质数
for循环的作用
这段循环的核心作用是遍历1到n的所有正整数,逐个判断是否为n的因数,同时统计因数的总数量:
- 循环初始化
f=1:从最小的正整数1开始检查 - 循环条件
f<=n:遍历范围覆盖到n本身为止 - 循环内的
if(n%f==0)判断:%是C语言的取余运算符,若n除以f的余数为0,说明f是n的正因数,触发计数器加1操作
运行流程示例
我们用输入值n=7(质数)为例走一遍流程:
- 循环变量f从1依次递增到7
- f=1时,7%1=0,p变为1
- f=2到f=6时,7取余结果都不为0,p无变化
- f=7时,7%7=0,p变为2
- 循环结束,判断p==2成立,输出
prime
再用输入值n=4(非质数)为例:
- 循环变量f从1依次递增到4
- f=1时,4%1=0,p变为1
- f=2时,4%2=0,p变为2
- f=3时,4%3=1,p无变化
- f=4时,4%4=0,p变为3
- 循环结束,判断p==2不成立,输出
not prime
补充说明
这是质数判断的最基础实现,效率较低,实际使用时不需要遍历到n,只需要遍历到√n即可完成判断,因为因数是成对出现的。
内容的提问来源于stack exchange,提问作者Oss Jr.
相关产品推荐
相关产品推荐

