Codechef Yet another cute girl
题意大概就是让你求一下[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;
}
Codechef Yet another cute girl的更多相关文章
- CodeChef November Challenge 2013 部分题解
http://www.codechef.com/NOV13 还在比...我先放一部分题解吧... Uncle Johny 排序一遍 struct node{ int val; int pos; }a[ ...
- 【BZOJ-3514】Codechef MARCH14 GERALD07加强版 LinkCutTree + 主席树
3514: Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 1288 Solved: 490 ...
- 【BZOJ4260】 Codechef REBXOR 可持久化Trie
看到异或就去想前缀和(⊙o⊙) 这个就是正反做一遍最大异或和更新答案 最大异或就是很经典的可持久化Trie,从高到低贪心 WA: val&(1<<(base-1))得到的并不直接是 ...
- CUTE FTP 控制连接已关闭
使用Cute FTP连接FTP站点时,出现上述错误,在另外一台电脑上却可以正常连接. 原因:FTP服务器IP访问规则的限制 解决方法:在ServerU 服务器中进入服务器详细信息配置界面,在IP访问规 ...
- 越狱Season 1-Episode 4: Cute Poison
Season 1, Episode 4: Cute Poison [Previously on Prison Break] previously: 以前地 前情提要 -Burrows: I didn' ...
- codechef 两题
前面做了这场比赛,感觉题目不错,放上来. A题目:对于数组A[],求A[U]&A[V]的最大值,因为数据弱,很多人直接排序再俩俩比较就过了. 其实这道题类似百度之星资格赛第三题XOR SUM, ...
- codechef January Challenge 2014 Sereja and Graph
题目链接:http://www.codechef.com/JAN14/problems/SEAGRP [题意] 给n个点,m条边的无向图,判断是否有一种删边方案使得每个点的度恰好为1. [分析] 从结 ...
- BZOJ3509: [CodeChef] COUNTARI
3509: [CodeChef] COUNTARI Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 339 Solved: 85[Submit][St ...
- CodeChef CBAL
题面: https://www.codechef.com/problems/CBAL 题解: 可以发现,我们关心的仅仅是每个字符出现次数的奇偶性,而且字符集大小仅有 26, 所以我们状态压缩,记 a[ ...
随机推荐
- Java中集合类
一.Collection Collection 接口用于表示任何对象或元素组.想要尽可能以常规方式处理一组元素时,就使用这一接口.Collection 在前面的大图也可以看出,它是List 和 Set ...
- 快速幂&&矩阵快速幂
快速幂 题目链接:https://www.luogu.org/problemnew/show/P1226 快速幂用了二分的思想,即将\(a^{b}\)的指数b不断分解成二进制的形式,然后相乘累加起来, ...
- javascript中typeof、undefined 和 null
typeof 是运算符,注意不是函数,是运算符,其作用,是考察变量究竟是什么类型.或曰,是变量是否定义或是否初始化的照妖镜.返回值是字符串. undefined 表示一个对象没有被定义或者没有被初始化 ...
- shell脚本,awk实现文件a的每行数据与文件b的相对应的行的值相减,得到其绝对值。
解题思路 文件 shu 是下面这样的.220 34 50 70553 556 32 211 1 14 98 33 文件 jian是下面这样的.1082 想要得到结果是下面这样的.210 24 40 6 ...
- 简单jQuery图片自适应宽度插件jQuery.imgAutoSize.js
(function ($) { var loadImg = function (url, fn) { var img = new Image(); img. ...
- mysql随机获取数据
SELECT * FROM `table` AS t1 JOIN ( SELECT ROUND( RAND() * ( (SELECT MAX(id) FROM `table`) - (SELECT ...
- python-leepcode-作用解析 - 5-27
30 找不同 给定两个字符串 s 和 t,它们只包含小写字母. 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母. 请找出在 t 中被添加的字母. 示例: 输入: s = "a ...
- python红包随机生成(隔板法)
#红包生成思路#200 块钱 10个红包#0-200 的一个轴,随机取9个点,分成10段, 每一段的值表示一个红包的大小 #把输入的 money值 * 100 拿到的数值就是分, 不用再考虑单位是元的 ...
- Lambert (兰伯特)光照模型
Lambert (兰伯特)光照模型 是光源照射到物体表面后,向四面八方反射,产生的漫反射效果.这是一种理想的漫反射光照模型.如下图:这个是顶点函数处理后的该光照模型,因此看起来像素不够平滑. 漫反射 ...
- Linux下安装Oracle客户端
1.创建用户名和组名 /usr/sbin/groupadd oinstall /usr/sbin/groupadd dba /usr/sbin/useradd -m -g oinstall -G db ...