试除法(2--a-1)
判断一个数是否是素数,素数是只能被1或者他本身整除的数(1不是素数),可以通过循环遍历从2--a-1所有数,看有没有数能够被他整除,从而去判断他是不是素数.
代码部分
#include<stdio.h>
int main()
{
int arr[10]={2,3,4,5,66,77,567,2553,3456,4436};
int flag=0;
for(int i=0;i<10;i++)
{
if(arr[i]==2)
{
flag=0;
}else if(arr[i]==1)
{
flag=1;
}
for(int j=2;j<arr[i]-1;j++)
{
if(arr[i]%2==0)
{
flag=1;
break;
}
}
if(flag==1)
{
printf("%d不是素数\n",arr[i]);
}else
{
printf("%d是素数\n",arr[i]);
}
}
return 0;
}
运行结果
优化(2-a/2)
将此行for(int j=2;j<arr[i]-1;j++)改为for(int j=2;j<arr[i]/2;j++),效果也能达到
再优化(去除偶数)
偶数能被2整除,必不是素数, 可以在循环前加一个判断,筛选出奇数,
#include<stdio.h>
int main()
{
int arr[10]={2,3,4,5,66,77,567,2553,3456,4436};
int count=0;
for(int i=0;i<10;i++)
{
if(arr[i]==2)
{
flag=0;
}else if(arr[i]==1)
{
flag=1;
}
if(arr[i]%2!=0)
{
for(int j=2;j<arr[i]/2;j++)
{
if(arr[i]%2==0)
{
count=1;
break;
}
}
if(count==1)
{
printf("%d不是素数\n",arr[i]);
}else
{
printf("%d是素数\n",arr[i]);
}
}
}
return 0;
}
运行结果
再再优化(到其平方根)
最常用的优化策略是只试除到待判断数的平方根即可。这是因为,如果待判断数不是素数,那么它必定有一个小于等于其平方根的因子。因此,我们只需要试除到平方根即可确定待判断数是否为素数。
将for(int j=2;j<arr[i]/2;j++)改为for(int j=2;j<sqrt(arr[i]);j++)(在头文件math.h中声明)