要求素数,首先我们要知道什么是素数,在解题的时候,不要急着去寻找方法解题,而是要先了解它的根本,才可以在遇到类似题的时候轻松面对解决
质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。
程序如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i;
for (i = 100; i <= 200; i++) //也可自行设定数值范围
{
int j = 0;
for (j = 2; j <= i - 1; j++)
{
if (i%j == 0)
{
break;
} //如果i%j=0说明i可以整除j,则跳出if语句
}
if (i == j)
{
printf("%d ", i);
}
}
system("pause");
return 0;
}
结果如下:
优化方案一:
int main()
{
int i;
for (i = 101; i <= 200; i+=2) //由于100不是素数,所以可以从101开始
{
int j = 0;
for (j = 2; j <= i - 1; j++)
{
if (i%j == 0)
{
break;
} //如果i%j=0说明i可以整除j,则跳出if语句
}
if (i == j)
{
printf("%d ", i);
}
}
system("pause");
return 0;
}
优化方案二:
int main()
{
int i;
for (i = 101; i <= 200; i+=2) //由于100不是素数,所以可以从101开始
{
int j = 0;
for (j = 3; j <= i - 1; j++)
{
if (i%j == 0)
{
break;
} //如果i%j=0说明i可以整除j,则跳出if语句
}
if (i == j)
{
printf("%d ", i);
}
}
system("pause");
return 0;
}
优化方案三:
int main()
{
int i;
for (i = 101; i <= 200; i+=2) //由于100不是素数,所以可以从101开始
{
int j = 0;
for (j = 3; j <= i - 1; j+=2)
{
if (i%j == 0)
{
break;
} //如果i%j=0说明i可以整除j,则跳出if语句
}
if (i == j)
{
printf("%d ", i);
}
}
system("pause");
return 0;
}
优化方案四:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int i;
for (i = 101; i <= 200; i+=2) //由于100不是素数,所以可以从101开始
{
int j = 0;
for (j = 3; j <= sqrt(i); j+=2)
{
if (i%j == 0)
{
break;
} //如果i%j=0说明i可以整除j,则跳出if语句
}
if (j>sqrt(i))
{
printf("%d ", i);
}
}
system("pause");
return 0;
}
写程序最原始的目的可能是解决某个题或者某个实际问题,但是,当以后我们进入社会,你要解决的就全部都是实际问题,那时候你面对的可能不仅仅只是解决它,而是要不断的优化它,要让成本更低,时间更短,效率更高,而这种优化解决问题的思路,要从写小程序开始培养。
转载于:https://blog.51cto.com/10921020/1737097