牛客练习赛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 题目描述 若你摘得小的星星 你将得到小的幸福 若你摘得大的星星 你将得到大的财富 若两者都能摘得 你将得到 ...
 
随机推荐
- 对Javascript中的对象Object改变内存及其变量改变的图解
			
Object 存储变量时,变量属性的内存改变图解 左边: 对象的内存 中间:变量属性的内存 右边:属性值的内存 [图一]创建一个对象,存obj1 变量--里面存age 属性和属性值--12. ...
 - 分布式服务治理框架Dubbo的前世今生及应用实战
			
Dubbo的出现背景 Dubbo从开源到现在,已经出现了接近10年时间,在国内各大企业被广泛应用. 它到底有什么魔力值得大家去追捧呢?本篇文章给大家做一个详细的说明. 大规模服务化对于服务治理的要求 ...
 - redis入门到精通系列(五):redis的持久化操作(RDB、AOF)
			
(一)持久化的概述 持久化顾名思义就是将存储在内存的数据转存到硬盘中.在生活中使用word等应用的时候,如果突然遇到断电的情况,理论上数据应该是都不见的,因为没有保存的word内容都存放在内存里,断电 ...
 - 【Service】【MiddleWare】【Message】rabbitMQ
			
1. 概念: 1.1. 消息型中间件:遵循AMQP协议(高级消息队列协议)AMQP 0-9-1 AMQP 1.0 1.2. 路由模型: direct topic fan-out headers 1.3 ...
 - Spring Batch(8) -- Listeners
			
September 29, 2020 by Ayoosh Sharma In this article, we will take a deep dive into different types o ...
 - springmvc中的异常处理方法
			
//1.自定义异常处理类 2.编写异常处理器 3.配置异常处理器 package com.hope.exception;/** * 异常处理类 * @author newcityma ...
 - 南邮CTF-MISC-Remove Boyfriend
			
Remove Boyfriend 打开wireshark,找到关键字部分Remove Boyfriend 在第五行 在此行右击 点击追踪流 选择TCP流,可以分析出流量的传输过程 通过上面的执行列表 ...
 - python3约瑟夫环问题
			
问题描述:n个人围成一个圈,从第一个人开始数1,数到第k个出局,然后下一个人继续从1数,求出局人编号 思路:将所有人编号放到数组里,一个人出局后,下一个人加上k对数组长度求余,得出下一个要删除的编号. ...
 - vm16虚拟机安装win11
			
vm16虚拟机安装win11 参考https://baijiahao.baidu.com/s?id=1712702900207158969&wfr=spider&for=pc win1 ...
 - Redis哨兵 部署和配置
			
目录 一.哨兵简介 哨兵介绍 哨兵原理 二.哨兵部署 环境介绍 哨兵配置 三.使用验证 一.哨兵简介 哨兵介绍 Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在 ...