牛客练习赛44 C:小y的质数
链接:https://ac.nowcoder.com/acm/contest/634/C?tdsourcetag=s_pcqq_aiomsg
来源:牛客网
题目描述
给出一个区间\([L,R]\),求出\([L,R]\)中孪生质数有多少对。
由于这是一个区间筛质数的模板题。所以小k不屑于去写。
所以出题人只好yy了另一道题。
定义\(k\)生互质数为满足\(y + k\)与\(y - k\)互质的数。
现在给出区间\([L,R]\),你需要输出区间内\(k\)生互质数有多少对
我们说一对\(k\)生互质数在区间\([L,R]\)内,当且仅当\(y+k \in[L,R]\)且\(y-k \in[L,R]\)
输入描述:
一行三个数字\(L,R,k\)
输出描述:
一行一个数字表示区间\([L,R]\)内的\(k\)生互质数的对数
示例1
输入
5 10 1
输出
2
说明
分别为\((5,7),(7,9)\)
示例2
输入
287 11633 10
输出
4532
备注:
\(0 \leq L,R \leq 10^{18}\)
\(1 \leq k \leq 10^{13}\)
思路
\(gcd(y-k,y+k)=1\),令\(x=y-k\),可将\(k\)生互质数转换成:在\([l,r-2\times k]\)范围内,有多少个\(x\),使得\(gcd(x,x+2\times k)=1\)
可以很容易的得到:\(gcd(x,x+2\times k)=gcd(x,2\times k)\),所以该问题就转换成了:在区间\([l,r-2\times k]\)上,有多少个数和\(2\times k\)互质。
接下来,对\(2k\)进行质因子拆分,枚举所有因子,进行容斥即可
代码
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define ms(a,b) memset(a,b,sizeof(a))
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=1e6+10;
const int mod=1e9+7;
const int maxm=1e3+10;
using namespace std;
map<ll,int>mp;
vector<ll>pri;
ll lcm(ll a,ll b)
{
return a/__gcd(a,b)*b;
}
void get_prime(ll n)
{
for(ll i=2;i*i<=n;i++)
{
if(n%i==0)
{
while(n%i==0)
{
if(!mp[i])
{
pri.push_back(i);
mp[i]=1;
}
n/=i;
}
}
}
if(n>1)
pri.push_back(n),mp[n]=1;
}
int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
freopen("/home/wzy/in.txt", "r", stdin);
freopen("/home/wzy/out.txt", "w", stdout);
srand((unsigned int)time(NULL));
#endif
ios::sync_with_stdio(false);
cin.tie(0);
ll l,r,k;
cin>>l>>r>>k;
ll K=2*k;
r-=K;
if(r<l)
{
cout<<0<<endl;
return 0;
}
l=max(l,1LL);
get_prime(K);
int sz=pri.size();
ll ans,ans1;
ans=ans1=0;
for(int i=1;i<(1<<sz);i++)
{
int cnt=0;
ll tmp=1;
for(int j=0;j<sz;j++)
{
if(i>>j&1)
{
cnt++;
tmp=lcm(tmp,pri[j]);
}
}
if(cnt&1)
{
ans+=(l-1)/tmp;
ans1+=(r)/tmp;
}
else
{
ans-=(l-1)/tmp;
ans1-=r/tmp;
}
}
cout<<r-l+1-ans1+ans<<endl;
#ifndef ONLINE_JUDGE
cerr<<"Time elapsed: "<<1.0*clock()/CLOCKS_PER_SEC<<" s."<<endl;
#endif
return 0;
}
牛客练习赛44 C:小y的质数的更多相关文章
- 牛客练习赛44 C 小y的质数 (数论,容斥定理)
链接:https://ac.nowcoder.com/acm/contest/634/C 来源:牛客网 题目描述 给出一个区间[L,R],求出[L,R]中孪生质数有多少对. 由于这是一个区间筛质数的模 ...
- 牛客练习赛44 A 小y的序列 (模拟,细节)
链接:https://ac.nowcoder.com/acm/contest/634/A 来源:牛客网 小y的序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...
- 牛客练习赛44 B 小y的线段 (思维)
链接:https://ac.nowcoder.com/acm/contest/634/B 来源:牛客网 题目描述 给出n条线段,第i条线段的长度为a_ia i ,每次可以从第i条线段的j位置跳到第 ...
- 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)
牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...
- 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)
牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...
- 牛客练习赛44 B:小y的线段
链接:https://ac.nowcoder.com/acm/contest/634/B 来源:牛客网 题目描述 给出\(n\)条线段,第\(i\)条线段的长度为\(a_i\),每次可以从第\(i\) ...
- 牛客练习赛44 B题 (思维)
链接:https://ac.nowcoder.com/acm/contest/634/B 来源:牛客网 给出n条线段,第i条线段的长度为ai, 每次可以从第i条线段的j位置跳到第i + 1条线段的j+ ...
- 牛客练习赛48 D 小w的基站网络
链接:https://ac.nowcoder.com/acm/contest/923/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 牛客练习赛40 A 小D的剧场 (思维dp)
链接:https://ac.nowcoder.com/acm/contest/369/A 题目描述 若你摘得小的星星 你将得到小的幸福 若你摘得大的星星 你将得到大的财富 若两者都能摘得 你将得到 ...
随机推荐
- Identity Server 4 从入门到落地(四)—— 创建Web Api
前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...
- Java日期时间操作基础——包含JDK1.8时间操作新特性
JDK1.7日期时间操作 示例小结 public class DateTest { public static final String FORMAT_DATE = "yyyy-MM-dd& ...
- 关于java中的安全管理器
最近再查看java的源码的时候看见了这一类代码 final SecurityManager sm = System.getSecurityManager(); 想要了解这个是为了做什么,查看资料之后发 ...
- 数仓day04----日志预处理2
1.详细描述idmap的整个计算方案 (1)使用SparkSession对象读取用户不同类别的埋点日志,解析并抽取出相应的标识id,使用union进行合并,得到装有汇总标识id的rdd(ids) (2 ...
- 使用Rapidxml重建xml树
需求 : 重建一棵xml树, 在重建过程中对原来的标签进行一定的修改. 具体修改部分就不给出了, 这里只提供重建部分的代码 code : /****************************** ...
- Oracle中如何自定义类型
一:Oracle中的类型有很多种,主要可以分为以下几类:1.字符串类型.如:char.nchar.varchar2.nvarchar2.2.数值类型.如:int.number(p,s).integer ...
- OC Swift 走马灯效果
我们常见走马灯样式的功能,下面整理一下 Object-C 与 Swift 的实现代码 OC UILabel *label3 = [[UILabel alloc] initWithFrame:CGRec ...
- Android 高级UI组件(二)
1.ExpandableListView 显示垂直滚动两级列表的条目,只允许两个层次 整体思路: 要给ExpandableListView设置适配器,那么必须先设置数据源. 数据源,就是此处的适配器类 ...
- jenkins之邮箱设置
- OC-引用计数器,内存管理,野指针
总结 全局断点 →-->+-->Add Exception Breakpoint 开启僵尸监听 打开Edit scheme -->Diagnostics-->Enable Zo ...