判决素数个数(筛法)

描述

输入两个整数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;
}

猜你喜欢

转载自blog.csdn.net/qq_43408238/article/details/86568970
今日推荐