用c++程序求100到200间的全部素数有几种方法?程序分别是什么?
展开全部
//两种方法:1、暴力;2、筛选法求素数。
//第一种:暴力法,用循环从100到200的每个数判断一下,是素数就输出。
#include <iostream>
#include <cmath>
using namespace std;
bool prime(int num)
{
int max=(int)sqrt((double)num),i;
for(i=2;i<=max&&num%i;i++);
if(i>max) return 1;
else return 0;
}
int main()
{
int i;
for(i=100;i<=200&&prime(i)==0;i++);
cout<<i;
for(i++;i<=200;i++)
if(prime(i)) cout<<" "<<i;
cout<<endl;
return 0;
}
//第二种:筛选法求素数,原理:素数的倍数一定不是素数。从2开始,把它的倍数都去掉
#include <iostream>
#include <cmath>
#define max 200
using namespace std;
bool prime[max+1];
int main()
{
int mid=(int)sqrt((double)max);
prime[0]=prime[1]=1;
for(int i=2;i<=mid;i++)
for(int j=i+i;j<=max;j+=i)
prime[j]=1;
int i;
for(i=100;i<=200&&prime[i];i++);
cout<<i;
for(i++;i<=200;i++)
if(prime[i]==0) cout<<" "<<i;
cout<<endl;
return 0;
}
//第一种:暴力法,用循环从100到200的每个数判断一下,是素数就输出。
#include <iostream>
#include <cmath>
using namespace std;
bool prime(int num)
{
int max=(int)sqrt((double)num),i;
for(i=2;i<=max&&num%i;i++);
if(i>max) return 1;
else return 0;
}
int main()
{
int i;
for(i=100;i<=200&&prime(i)==0;i++);
cout<<i;
for(i++;i<=200;i++)
if(prime(i)) cout<<" "<<i;
cout<<endl;
return 0;
}
//第二种:筛选法求素数,原理:素数的倍数一定不是素数。从2开始,把它的倍数都去掉
#include <iostream>
#include <cmath>
#define max 200
using namespace std;
bool prime[max+1];
int main()
{
int mid=(int)sqrt((double)max);
prime[0]=prime[1]=1;
for(int i=2;i<=mid;i++)
for(int j=i+i;j<=max;j+=i)
prime[j]=1;
int i;
for(i=100;i<=200&&prime[i];i++);
cout<<i;
for(i++;i<=200;i++)
if(prime[i]==0) cout<<" "<<i;
cout<<endl;
return 0;
}
展开全部
判断一个数是x否为素数就是 2 - sqrt(x) 之间是否有整除;没有就是素数。
再从100 - 200 做一个循环,判断每个数是否为素数。
再从100 - 200 做一个循环,判断每个数是否为素数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定型循环和不定型循环,数组和指针等几种方法都行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询