2017苏宁双十一gmv:三级C上机的一道求素数的问题

来源:百度文库 编辑:高考问答 时间:2024/04/28 04:35:58
void num(int m,int k,intxx[])
{
int data=m+1;
int half,n=0,i;
while(1)
{
half=data/2;
for(i=2;i<=half;i++)
if(data%i==0)
break;
if(i>half)为什么执行到这里,程序正常退出for循环体,就说数字data是素数,不太懂,请教一下....
{
xx[n]=data;
n++;
}
if(n>=k)
break;
data++;
}
}

挺简单的,假设他不是素数的话,那就是一个相约的数,一定可以分成两个数,这两个数肯定有一个比这个数加1的一半小吧,所以比当i>half时,都找不到相约的数,那他一定是素数了,因为素数只有自己本身和1相约

假设一个数A 可以分解为A=a1*a2

那么必然a1和a2中至少有一个小于等于sqrt(A)