题目:

给定整数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. 嵌套SQL语句訪问DB2中SQLCA的调用技巧

    在IBM的关系型数据库产品DB2中,使用SQL Communication Area(SQLCA)将程序中嵌套的SQL语句执行情况返回给程序. 在程序中有针对性地对SQLCA实施调用,可对程序中各类S ...

  2. Android Studio 中 Gradle 依赖的统一管理(rootProjectt)

    最近遇到Android Studio 中 Gradle 依赖的统一管理的不懂得地方,看大神的也没看懂,百度了一下,使用起来还挺方便 下面是链接,在这里我就不详细说明了, http://www.jian ...

  3. Java使用jmagick处理图片遇到的异常

    java通过ImageMagick处理图片遇到问题: 下面异常都是我一个一个遇到的: 异常1: Exception in thread "main" java.lang.Unsat ...

  4. elasticsearch从入门到出门-02-简单的CRUD

    操作背景: 电商网站上面的一个商品的增删改查: es 能接受的都是JSON格式的数据 Es 提供了一套简单的集群信息健康监控的api GET /_cat/health?v   epoch      t ...

  5. iOS 微信支付点击左上角返回解决方案

    在网了搜了一些解决方案,感觉并不是那么严谨,于是自己动手搞了一下,直接说思路 iOS调起第三方支付和安卓还不一样,安卓是把第三方的支付SDK直接镶嵌在自己的App中,而iOS由于沙盒机制,各个应用之间 ...

  6. Orthogonal Least Squares Learning Algorithm for Radial Basis Function Networks

    Orthogonal Least Squares Learning Algorithm for Radial Basis Function Networks S. Chen, C. F. N. Cow ...

  7. 【python】-- RabbitMQ 安装、基本示例、轮询机制

    RabbitMQ MQ全称为Message Queue, 是一种分布式应用程序的的通信方法,它是消费-生产者模型的一个典型的代表,producer往消息队列中不断写入消息,而另一端consumer则可 ...

  8. 用NODEJS处理EXCEL文件导入导出,文件上传

    參考文章 http://librajt.github.io/2013/08/04/handle-excel-file-with-nodejs/ 对照了 ExcelJS ,https://github. ...

  9. Nodejs课堂笔记-第二课 package.json的作用

    本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 上节课,我们打造了一下IDE工具-web storm的显示界面.至少现在回到 ...

  10. 遇到IIS configuration error错误的可以看看,不一定是权限问题

    最近接手了别人的一个 DOT NET项目,编译.调试一切都OK(心里暗暗高兴),发布吧,结果放到服务器上一运行出现Configuration Error错误,提示:“Access to the pat ...