题意大概就是让你求一下[L,R]中的约数个数是素数的数的个数。

其中1<=L<=R<=1e12,R-L<=1e6.

然后我写了两种做法,第一种是可以直接搞出来L-R的约数个数,然后直接统计一下就好了。

这个的复杂度大致是 O((R-L) * log(R-L))

第二种就是需要先发现满足条件的数必须只能是一个质数的一个质数-1次方,所以直接筛。

这个的复杂度大致是 O((R-L) * 一个小于log的可以看成常数的东西)

最后需要注意一下1是不合法的,我这两种做法一开始都把1算进来了2333

code1:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1000000;
int zs[maxn/2],t=0,T,ans;
bool v[maxn+5];
int d[maxn+5],derta;
ll l,r,lef[maxn+5]; inline void init(){
for(int i=2;i<=maxn;i++){
if(!v[i]) zs[++t]=i;
for(int j=1,u;j<=t&&(u=zs[j]*i)<=maxn;j++){
v[u]=1;
if(!(i%zs[j])) break;
}
}
} inline void solve(){
scanf("%lld%lld",&l,&r),derta=r-l;
fill(d,d+derta+1,1),ans=0;
for(int i=0;i<=derta;i++) lef[i]=i+(ll)l; for(int i=1;i<=t&&zs[i]*(ll)zs[i]<=r;i++)
for(int j=(l-1)/zs[i]*(ll)zs[i]+(ll)zs[i]-l,now;j<=derta;j+=zs[i]){
now=1;
while(!(lef[j]%zs[i])) lef[j]/=zs[i],now++;
d[j]*=now;
}
for(int i=0;i<=derta;i++){
if(lef[i]!=1) d[i]*=2;
if(!v[d[i]]) ans++;
} if(l==1) ans--;
printf("%d\n",ans);
} int main(){
init();
scanf("%d",&T);
while(T--) solve();
return 0;
}

code2:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1000000;
int zs[maxn/2],t=0,T,ans,derta;
bool v[maxn+5],vis[maxn+5];
ll l,r; inline void init(){
for(int i=2;i<=maxn;i++){
if(!v[i]) zs[++t]=i;
for(int j=1,u;j<=t&&(u=zs[j]*i)<=maxn;j++){
v[u]=1;
if(!(i%zs[j])) break;
}
}
} inline void solve(){
scanf("%lld%lld",&l,&r),derta=r-l;
memset(vis,0,sizeof(vis)),ans=0;
for(int i=1;i<=t&&zs[i]*(ll)zs[i]<=r;i++){
for(ll j=zs[i],u=2;j<=r;j*=(ll)zs[i],u++) if(!v[u]&&j>=l) ans++;
for(int j=r/zs[i]*zs[i]-l;j>=0;j-=zs[i]) vis[j]=1;
}
for(int i=0;i<=derta;i++) if(!vis[i]) ans++;
if(l==1) ans--;
printf("%d\n",ans);
} int main(){
init();
scanf("%d",&T);
while(T--) solve();
return 0;
}

最新文章

  1. linux入门级常用命令
  2. C#按回车Enter使输入焦点自动跳到下一个TextBox的方法收集
  3. 年前辞职-WCF入门学习(3)
  4. 搭建andiord sdk和安装eclipse adt插件的个人小体会
  5. JS货币数字转换中文
  6. Codeforces Educational Codeforces Round 5 B. Dinner with Emma 暴力
  7. mybatis动态SQL的&lt;set&gt;条件
  8. 浅谈echo、print、var_dump()、print_r()的区别
  9. Stanford CS224N 第二课: word2vec详细介绍
  10. iOS 用户体验之音频
  11. iframe 里的高度自适应
  12. SpringMVC常用配置
  13. Python 面向对象高阶-----metaclass
  14. Excelpackage的简单使用(导出用户信息并保存)
  15. LeetCode-两个结构分别遍历,然后合并
  16. Python的web编程
  17. Vue小案例 之 商品管理------修改商品数量以及增加入库日期属性
  18. HDU 4498 Function Curve (自适应simpson)
  19. 在稳定性测试中,将测试结果持续填加进入html报告
  20. constexpr和常量表达式的注意事项

热门文章

  1. shell脚本,实现奇数行等于偶数行。
  2. 对Java提供的锁机制的一些思考
  3. webpack-dev-server proxy代理
  4. perl学习之:字符串函数
  5. laravel中的gate
  6. 关于Python解释器
  7. python爬虫入门四:BeautifulSoup库(转)
  8. 数据库质疑或只有MDF文件资料
  9. 小白用shiro(2)
  10. CSS 如何让 height:100%; 起作用