标签:otp namespace include number not tin eps 线性 合数
素数必然符合题意。
对于合数,如若它是某个素数x的k次方(k为某个素数y减去1),一定不符合题意。只需找出这些数。
由约数个数定理,其他合数一定符合题意。
就从小到大枚举素数,然后把它的素数-1次方都排除即可。
#include<cstdio> #include<cmath> using namespace std; #define MAXP 1000100 #define EPS 0.00000001 typedef long long ll; ll L,R; bool isNotPrime[MAXP+10]; int num_prime,prime[MAXP+10]; void shai() { for(long i = 2 ; i < MAXP ; i ++) { if(! isNotPrime[i]) prime[num_prime ++]=i; for(long j = 0 ; j < num_prime && i * prime[j] < MAXP ; j ++) { isNotPrime[i * prime[j]] = 1; if( !(i % prime[j])) break; } } } int main() { scanf("%I64d%I64d",&L,&R); shai(); int sum=0; for(int i=0;i<num_prime;++i) { ll t=(ll)prime[i]; for(int j=1;;++j) { bool flag=1; for(int k=prime[j-1];k<prime[j];++k) { if(log(t)+log(prime[i])-log(R)>EPS) { flag=0; break; } t*=(ll)prime[i]; } if(!flag) break; if(t>=L) ++sum; } } printf("%I64d\n",R-L+1ll-(ll)sum); return 0; }
【线性筛】【筛法求素数】【约数个数定理】URAL - 2070 - Interesting Numbers
标签:otp namespace include number not tin eps 线性 合数
原文地址:http://www.cnblogs.com/autsky-jadek/p/6361488.html