题目:

给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
数对(x,y)有多少对.

输入:

一个整数N。

输出:

如题。

Sample  Input
4

Sample Output

4

Hint

对于样例(2,2),(2,4),(3,3),(4,2)

1<=N<=10^7

思路:

对于本题,因为是使得为质数,所以必然要枚举小于等于的质数,那么对于每一个质数,

只需要求在区间中,满足有序对互质的对数。

也就是说,现在问题转化为:在区间中,存在多少个有序对使得互质,这个问题就简单啦,因为

是有序对,不妨设,那么我们如果枚举每一个,小于有多少个与互素,这正是欧拉函数。所以

我们可以递推法求欧拉函数,将得到的答案乘以2即可,但是这里乘以2后还有漏计算了的,那么有哪些呢?

是且为素数的情况,再加上就行了。

另外,在bzoj上好像空间限制的原因要用埃氏筛法筛质数,而在nyzoj上,数据点较大,最好用欧拉筛筛质数。

//nyzoj(乌市一中在线评测) www.nyzoj.com:5283 题目:blcup (10053)

代码如下:

//bzoj AC版:

#include<cstdio>
typedef long long ll;
const ll N=1e7+;
ll n,f[N],phi[N];
bool prime[N];
ll p[N],cnt;
void prework()
{
for (int i=;i<=n;i++) prime[i]=;
for (int i=;i<=n;i++)
{
if (prime[i])
{
p[++cnt]=i;
for (int j=i<<;j<=n;j+=i)
prime[j]=;
}
}
}
void Er()
{
for (int i=;i<=n;i++) phi[i]=i;
for (int i=;i<=n;i+=) phi[i]>>=;
for (int i=;i<=n;i+=)
{
if (phi[i]==i)
for (int j=i;j<=n;j+=i)
phi[j]=phi[j]-phi[j]/i;
}
f[]=;
for (int i=;i<=n;i++)
f[i]=f[i-]+(phi[i]<<);
}
ll solve()
{
ll ans=;
for (int i=;i<=cnt;i++)
{
ans+= + f[n/p[i]] ;
}
return ans;
}
int main()
{
scanf ("%lld",&n);
prework();
Er();
printf("%lld",solve());
return ;
}

//nyzoj AC 版:

#include<cstdio>
typedef long long ll;
const ll N=1e7+;
ll n,f[N],phi[N];
int v[N];
ll p[N],cnt;
void prework()
{
for (int i=;i<=n;i++)
{
if (v[i]==)
{
v[i]=i; p[++cnt]=i;
}
for (int j=;j<=cnt;j++)
{
if (p[j]>v[i] || p[j]>n/i) break;
v[i*p[j]]=p[j];
}
}
}
void Er()//递推求欧拉函数
{
for (int i=;i<=(n>>);i++) phi[i]=i;
for (int i=;i<=(n>>);i+=) phi[i]>>=;
for (int i=;i<=(n>>);i+=)
{
if (phi[i]==i)
for (int j=i;j<=(n>>);j+=i)
phi[j]=phi[j]-phi[j]/i;
}
f[]=;
for (int i=;i<=(n>>);i++)
f[i]=f[i-]+(phi[i]<<);
}
ll solve()
{
ll ans=;
for (int i=;i<=cnt;i++)
{
ans+= + f[n/p[i]] ;
}
return ans;
}
int main()
{
scanf ("%lld",&n);
prework();
Er();
printf("%lld",solve());
return ;
}

求解范围中 gcd(a,b)== prime 的有序对数的更多相关文章

  1. 利用python求解物理学中的双弹簧质能系统详解

    利用python求解物理学中的双弹簧质能系统详解 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的 ...

  2. 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组

    题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明:初始化 nums1 和 nums2 的元素数量分别为 m ...

  3. iOS开发中GCD在多线程方面的理解

    GCD为Grand Central Dispatch的缩写. Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法.在Mac OS X 10.6雪豹中 ...

  4. 关于多线程中GCD的使用

    GCD 分为异步和同步 异步: ```objc  dispatch_async (  参数1  , {      } 同步: dispatch_sync( 参数1   , {   } ``` ###参 ...

  5. Swift中GCD与NSOperation相关

    GCD Swift 3必看:从使用场景了解GCD新API 常用写法: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_ ...

  6. iOS中GCD的使用小结

    http://www.jianshu.com/p/ae786a4cf3b1 本篇博客共分以下几个模块来介绍GCD的相关内容: 多线程相关概念 多线程编程技术的优缺点比较? GCD中的三种队列类型 Th ...

  7. 为什么因式分解n=pq分别得到pq是求解密钥中d的关键

    从d的来源来说,它是这样来的: "找到一个数d,使得ed-1能够被z整除.即给定e,选择数d,使得ed被z除的余数为1",即  ed=1 (mod z) 上面这句话中,为了求d,我 ...

  8. 剑指 Offer 30. 包含min函数的栈 + 双栈实现求解栈中的最小值

    剑指 Offer 30. 包含min函数的栈 Offer_30 题目描述: 题解分析: 题目其实考察的是栈的知识,本题的目的是使用两个栈来求解最小值. 第二个栈主要用来维护第一个栈中的最小值,所以它里 ...

  9. C++求解数组中出现超1/4的三个数字。

    #include <iostream> using namespace std; //求x!中k因数的个数. int Grial(int x,int k) { int Ret = 0; w ...

随机推荐

  1. [原创]使用vscode+es6写nodejs服务端调试配置

    前端的小伙伴们在babel等的加持下,已经可以愉快的使用es6来写代码了. 然后对于服务端的nodejs就有点坑爹了,虽然原生支持了es6,但是只是部分支持,一些不支持的特性(比如module)使用了 ...

  2. 牛人blog汇总

    1.天一思维: https://blog.csdn.net/tszty1997?t=1

  3. Python菜鸟之路:Python基础-类(1)——概念

    什么是类? 在python中,把具有相同属性和方法的对象归为一个类(class).类是对象的模板或蓝图,类是对象的抽象化,对象是类的实例化.类不代表具体的事物,而对象表示具体的事物. 类的创建 cla ...

  4. JS异错面试题

    转自 http://www.codeceo.com/article/one-javascript-interview.html function Foo() { getName = function ...

  5. 页游手游服务器(三)lua网络层

    在(一)中,介绍了c对lua层的拓展,这边主要写lua层的网络部分,目标是实现RPC调用,实现主要是三部分: 1通信协议(消息的序列化和反序列化) rpc调用主要信息包括方法名,方法参数,设计的通信协 ...

  6. vue项目创建流程和使用

    vue项目的创建 npm run dev 让项目执行起来 #下载vuex npm install vuex --save#下载axiosnpm install axios --save 当我们生成项目 ...

  7. Java语言实现简单FTP软件------>源码放送(十三)

    Java语言实现简单FTP软件------>FTP协议分析(一) Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二) Java语言实现简单FTP软件----- ...

  8. OutOfMemoryError: Java heap space和GC overhead limit exceeded在Ant的Build.xml中的通用解决方式

    这个仅仅是一点点经验,总结一下,当中前两个相应第一个Error.后两个相应第二个Error,假设heap space还不够.能够再改大些. <jvmarg value="-Xms512 ...

  9. 常见数据挖掘算法的Map-Reduce策略(2)

           接着上一篇文章常见算法的mapreduce案例(1)继续挖坑,本文涉及到算法的基本原理,文中会大概讲讲,但具体有关公式的推导还请大家去查阅相关的文献文章.下面涉及到的数据挖掘算法会有:L ...

  10. print函数详解及python打印99乘法表的不同方法

    首先你需要了解print的原型,并且要知道在python2和python3中print函数功能不同,不只是表现在后面带不带()一方面! 在python3中,通过help(print)可以得到print ...