【素数】:除了本身和1能被整除,其余不能被整除。
【方法1】
假设n是素数,只能被1和本身n整除,那么就说明2~n-1之间没有数整除。(面试时,此方法不宜推荐使用)
int main()
{
int i = 0;
for(i = 100; i <= 200;i++)
{
int j = 0;
for(j = 2;j <= i;j++)
{
if(i % j == 0)
{
break;
}
}
if(j > =i)
{
printf("%d\n",i);
}
}
return 0;
}
【方法2】
类比于方法1,减少其循环次数
对于任何一个数n=a*b,那么a和b之间必定有一个数时小于等于n/2的,比如:9=3 * 3;9=1 * 9 ,则2 ~ i之间可优化为2 ~ i/2。
int main()
{
int i = 0;
for(i = 100; i <= 200;i++)
{
int j = 0;
for(j = 2;j <= i/2;j++)
{
if(i % j == 0)
{
break;
}
}
if(j > i/2)
{
printf("%d\n",i);
}
}
return 0;
}
【方法3】
再进行优化。同理,对于任何一个数n=a*b,那么a和b之间必定有一个数时小于等于根号n的。比如8=1 * 8;8= 2 * 4,则2 ~ i之间可优化为2 ~ 根号n。
(注意sqrt函数的用法)
int main()
{
int i = 0;
for(i = 101; i <= 200;i += 2)//i += 2是i++的优化,去掉偶数
{
int j = 0;
for(j = 2;j <= sqrt((double)i);j++)//强制类型转换
{
if(i % j == 0)
{
break;
}
}
if(j > sqrt((double)i))
{
printf("%d\n",i);
}
}
return 0;
}
运行结果都如下所示: