UVa 10539 Almost Prime Numbers

来源:互联网 发布:魔音变声软件下载 编辑:程序博客网 时间:2024/05/14 15:41

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

素数筛选+二分查找~

先预处理出1000000(10^12),再把每个数在10^12内的次方求出来,最后排序,每次输入的时候二分查找即可~


#include<cstdio>#include<algorithm>using namespace std;#define ll long longint t,a[1000001];ll x,y,c[1000001],aa,bb;bool b[1000001];void findd(int u){for(int i=2;i<=u;i++){if(!b[i]) a[++a[0]]=i;for(int j=1;a[j]*i<=u;j++){b[i*a[j]]=1;if(i%a[j]==0) break;}}}int erfen(ll u){int l=1,r=a[0],mid;while(l<r){mid=(l+r+1)>>1;if(c[mid]>u) r=mid-1;else l=mid;}}int main(){findd(1000000);for(int i=1;i<=a[0];i++){ll z=(ll)a[i]*a[i];while(z<=1000000000000LL){c[++c[0]]=z;z*=(ll)a[i];}}sort(c+1,c+c[0]+1);scanf("%d",&t);while(t--){scanf("%lld%lld",&x,&y);aa=erfen(x);bb=erfen(y);if(c[aa]==x) aa--;if(c[1]>x) aa--;if(c[1]>y) bb--;printf("%d\n",bb-aa);}return 0;}


1 0
原创粉丝点击