UVa10539

http://vjudge.net/problem/UVA-10539

先打出来sqrt(n)以内的素数表,然后对于每个素数x,他对答案的贡献就是最大的p使x^p<=n,即log(x,n)。注意精度误差。 
用1..r的减去1..l-1的就是答案。

 1 /*by SilverN*/
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 #define LL long long
 8 using namespace std;
 9 const int mxn=1200000;
10 int pri[mxn],cnt=0;
11 bool vis[mxn];
12 int num[mxn];
13 void Pri(){
14     cnt=0;int i,j;
15     for(i=2;i<mxn;i++){
16         if(!vis[i])pri[++cnt]=i;
17         for(j=1;j<=cnt && i*pri[j]<mxn;j++){
18             vis[i*pri[j]]=1;
19             if(i%pri[j]==0)break;
20         }
21     }
22     return;
23 }
24 LL query(LL n){
25     LL ans=0;
26     int i,j;
27     for(i=1;i<=cnt && (LL)pri[i]*pri[i]<=n;i++){
28         ans+=log(n+0.1)/log(pri[i])-1;
29     }
30     return ans;
31 }
32 int n;
33 LL l,r;
34 int main(){
35     Pri();
36     int T;
37     scanf("%d",&T);
38     while(T--){
39         scanf("%lld%lld",&l,&r);
40         printf("%lld\n",query(r)-query(l-1));
41     }
42     return 0;
43 }
时间: 2024-08-04 02:40:12

UVa10539的相关文章

UVA-10539 Almost Prime Numbers

题目大意:这道题中给了一种数的定义,让求在某个区间内的这种数的个数.这种数的定义是:有且只有一个素因子的合数. 题目分析:这种数的实质是素数的至少两次幂.由此打表——打出最大区间里的所有这种数构成的表即可. 代码如下: 1 # include<iostream> 2 # include<cstdio> 3 # include<cmath> 4 # include<set> 5 # include<cstring> 6 # include<a

习题10-7 几乎是素数 UVa10539

1.题目描述:点击打开链接 2.解题思路:本题要求找在区间[L,R]中素因子只有一个且自身不是素数的数,这实际上就是找素因子的幂次大于1的数在该区间中有几个.可以利用前缀和的思想,用cal(k)表示不超过k的这样的数有几个,那么最终的答案就是cal(R)-cal(L-1).而cal()函数可以通过逐一尝试素数计算最大幂次来得到.当p>sqrt(k)时即可停止枚举. 注意要用long long输入. 3.代码: #define _CRT_SECURE_NO_WARNINGS #include<i

UVA-10539 打表+二分

题意非常简单,就是给你一个区间(闭区间),然后让你统计区间内有多少数满足本身不是素数,但只有一个素因子 首先注意题目中区间左右端点最大可以取到1e12,这早就超越了int的表示范围 我们首先打表计算出1e6内的素数表,然后计算所有满足要求的数,存进数组,最后排序 然后对于给定的区间[L,R],我们用二分找到上界和下届 二分一直是我心中的痛,总是用不好,以后碰一道二分记录一道 #include<iostream> #include<cmath> #include<cstdio&

《算法竞赛入门经典——训练指南》第二章题库

UVa特别题库 UVa网站专门为本书设立的分类题库配合,方便读者提交: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=442 注意,下面注有"extra"的习题并没有在书中出现,但在上面的特别题库中有,属于附加习题. 基础练习 (Basic Problems) UVa11388 GCD LCM UVa11889 Benefit UVa10943 How do y