链接: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的质数的更多相关文章

  1. 牛客练习赛44 C 小y的质数 (数论,容斥定理)

    链接:https://ac.nowcoder.com/acm/contest/634/C 来源:牛客网 题目描述 给出一个区间[L,R],求出[L,R]中孪生质数有多少对. 由于这是一个区间筛质数的模 ...

  2. 牛客练习赛44 A 小y的序列 (模拟,细节)

    链接:https://ac.nowcoder.com/acm/contest/634/A 来源:牛客网 小y的序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...

  3. 牛客练习赛44 B 小y的线段 (思维)

    链接:https://ac.nowcoder.com/acm/contest/634/B 来源:牛客网 题目描述 给出n条线段,第i条线段的长度为a_ia i ​ ,每次可以从第i条线段的j位置跳到第 ...

  4. 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)

    牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...

  5. 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)

    牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...

  6. 牛客练习赛44 B:小y的线段

    链接:https://ac.nowcoder.com/acm/contest/634/B 来源:牛客网 题目描述 给出\(n\)条线段,第\(i\)条线段的长度为\(a_i\),每次可以从第\(i\) ...

  7. 牛客练习赛44 B题 (思维)

    链接:https://ac.nowcoder.com/acm/contest/634/B 来源:牛客网 给出n条线段,第i条线段的长度为ai, 每次可以从第i条线段的j位置跳到第i + 1条线段的j+ ...

  8. 牛客练习赛48 D 小w的基站网络

    链接:https://ac.nowcoder.com/acm/contest/923/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  9. 牛客练习赛40 A 小D的剧场 (思维dp)

    链接:https://ac.nowcoder.com/acm/contest/369/A 题目描述 若你摘得小的星星 你将得到小的幸福  若你摘得大的星星 你将得到大的财富  若两者都能摘得 你将得到 ...

随机推荐

  1. k8s使用ceph的rbd作后端存储

    k8s使用rbd作后端存储 k8s里的存储方式主要有三种.分别是volume.persistent volumes和dynamic volume provisioning. volume: 就是直接挂 ...

  2. centOS7.4 , gcc4.8.5装cgdb

    从github上clone最新releast后进入文件夹 ./configure –prefix=/usr/local CXXFLAGS=-std=c++11 make&make instal ...

  3. 面试 Java 后端开发的感受

    上周,密集面试了若干位Java后端候选人,工作经验在3到5年间.我的标准其实不复杂(适用90%小小小公司,BAT等自动忽略): 第一能干活,第二Java基础要好,第三最好熟悉些分布式框架.我相信其它公 ...

  4. ehcache详解

    Ehcache是现在最流行的纯Java开 源缓存框架,配置简单.结构清晰.功能强大,最初知道它,是从Hibernate的缓存开始的.网上中文的EhCache材料以简单介绍和配置方法居多, 如果你有这方 ...

  5. ViewStub应用

    在开发应用程序的时候,会遇到这样的情况,在运行时动态的根据条件来决定显示哪个View或哪个布局,可以把可能用到的View都写在上面,先把他们的可见性设置为View.GONE,然后在代码中动态的更改它的 ...

  6. 分布式系统为什么不用自增id,要用雪花算法生成id???

    1.为什么数据库id自增和uuid不适合分布式id id自增:当数据量庞大时,在数据库分库分表后,数据库自增id不能满足唯一id来标识数据:因为每个表都按自己节奏自增,会造成id冲突,无法满足需求.  ...

  7. Dubbo服务暴露延迟

    Dubbo 2.6.5 版本以后,如果我们的服务启动过程需要warmup事件,就可以使用delay进行服务延迟暴露.只需在服务提供者的<dubbo:service/>标签中添加delay属 ...

  8. 基于Annotation(注解)的装配

    一.常用注解 1.@Component 是一种通用注解,可用于任何Bean 2.@Repository 通常用于注解DAO层类,即持久层 3.@Service 通常用于注解Service类,即服务层 ...

  9. 制作一个有趣的涂鸦物联网小项目(涂鸦模组SDK开发 CBU BK7231N WiFi+蓝牙模组 HSV彩色控制)

    实现的功能: l  APP控制月球灯 l  本地月球灯控制 l  APP控制"大白"颜色,实现各种颜色变身 l  门状态传感器状态APP显示 l  网络状态指示灯,连接服务器长亮, ...

  10. webapck搭建环境,让你知道vue中的h函数的作用和虚拟节点如何上树!

    搭建环境 npm init 初始化项目 npm i -D snabbdom 安装 npm i -D webpack@5 webpack-cli@3 webpack-dev-server@3 简单介绍 ...