C++求解:
(1):
#include <iostream>
using namespace std;
int main()
{
int i,n;
for(n=2;n<=100;n++)
{
for(i=2;i<=n-1;i++)
{
if(n%i==0)
break;
}
if(i==n)
cout<<n<<" ";
}
return 0;
}
(2):
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
int i,n;
for(n=2;n<=100;n++)
{
for(i=n-1;i>=sqrt(n);i--)
{
if(n%i==0)
break;
}
if(i<sqrt(n))
cout<<n<<" ";
}
return 0;
}
(3):
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int i,n;
for(n=2;n<=100;n++)
{
for(i=2;i<=sqrt(n);i++){
if(n%i==0)
break;
}
if(n==i||n%i!=0)
cout<<n<<" ";
}
return 0;
}
由于,一个数n可以由两个数a,b相乘表示,这两个数要么相等,都等于sqrt(n),要么a<sqrt(n)<b;所以,在寻找素数(只能被1和其本身整除的数)的时候,就可以只考虑sqrt(n)前面的所有数,因为小于和大于sqrt(n)的数是成对出现的。所以,利用sqrt(n)可以减少循环的次数,提高效率,建议(2)(3)。
C++的语言要麻烦一些,我又用Python 实现了下,感觉小清新的感觉:
Python 实现:
for i in [x for x in range(2,100) if not [y for y in range(2,x) if x % y == 0]]:
print i,
原理一样,不过代码量就少的多了。