请问这种判断是否为质数的方法的原理是什么呢?

#include<stdio.h>
#include<stdbool.h>

int main()
{
    int i,num;
    _Bool flag=1;

printf("请输入一个整数:");
scanf("%d",&num);

for(i=2;i<=num/2;i++)
{
    if(num%i==0)
    {
        flag=0;
    }
 } 
 if(flag)
 {
     printf("%d是一个素数!\n",num);
 }
 else
 {
     printf("%d不是一个素数!\n",num);
 }
 return 0;

}

给定一个数x>=2,如果x只能被1和x整除,那么x就是质数,否则就不是质数。换句话说,如果能找到一个数1<a<x且x能被a整除,那么x就不是质数。
如果x能被a整除,令b=x/a,那么x也能被b整除。假设a<=b,代入b得到a<=x/a,即a^2<=x,因此a<=sqrt(x)。故验证一个数x是否是质数,只需要验证x不能被(1, sqrt(x)]之间的任意整数整除。

我想你主要想问的应该是for循环的判断条件: i<=num/2
其实最为标准的应该是i<= num的开平方数,及sqrt(num) 因为我们的任何数能被整除都可以分为两部分而开平方num就是这两部分的分界点,所以我们只需要让num开平方的数就可以了.
而你是用的num/2是大于num开平方的,也就是相当于多判断了一些无用条件所以也可以完成素数的检验.
有问题的话可以问我我会给你看一下案例来帮助理解.
没有问题请帮忙点个采纳这是我回答的唯一动力

num/2和sqrt(num)本质上是一样的,当num<4的时候循环不执行,直接判定为质数;当num>=4的时候num/2>=sqrt(num),此时限制条件i<=num/2比i<=sqrt(num)更弱。