判决素数个数(筛法)

匿名 (未验证) 提交于 2019-12-02 23:05:13

描述

输入两个整数X和Y,输出两者之间的素数个数(包括X和Y)。

输入

两个整数X和Y(1 <= X,Y <= 10的5次方)。

输出

输出一个整数,表示X,Y之间的素数个数(包括X和Y)。

样例输入

 1 100

样例输出

 25

看到这题,首先想到的是在从a到b逐个判断,累加;我们也可以用筛法高效的做出,运行速度比第一个快了不少。此题还需注意a,b没说谁大谁小,要有一步比较交换。用筛法时要注意数组要开大一些(至少超过数据范围),否者会出现runtime error;

第一个方法的代码如下:

 #include<iostream> #include<bits/stdc++.h> using namespace std; int main() {      long long a,b,c=0,i,d,j;      cin>>a>>b;if(a>b) swap(a,b);      for(i=a;i<=b;i++)      {          d=0;if(i<=1) continue;          for(j=2;j<=sqrt(i);j++)          {              if(i%j==0) {d=1;break;}          }          if(d==0)   c++;      }      cout<<c; }

筛法如下:

 #include<iostream> #include<cstdio> #include<iomanip> #include<bits/stdc++.h> using namespace std; bool s[100004]; int main() {      long long a,b,c=0,i,d=0,j;      cin>>a>>b;if(a>b) swap(a,b);       memset(s,1,sizeof(s));s[1]=false;       for(i=2;i<=sqrt(b);i++)         if(s[i])         for(j=2;j<=b/i;j++)         s[i*j]=false;       for(int u=a;u<=b;u++)       if(s[u]) d++;       cout<<d; }

文章来源: https://blog.csdn.net/qq_43408238/article/details/86568970
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!