题目:

给定整数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. 手机touch事件

    touchstart:触摸开始的时候触发 touchmove:手指在屏幕上滑动的时候触发 touchend:触摸结束的时候触发 而每个触摸事件都包括了三个触摸列表,每个列表里包含了对应的一系列触摸点( ...

  2. webview300毫秒点击问题

    http://www.jshacker.com/note/3585 http://blog.csdn.net/zfy865628361/article/details/49512095 http:// ...

  3. ACboy needs your help(简单DP)

    HDU 1712 Problem Description ACboy has N courses this term, and he plans to spend at most M days on ...

  4. Java基础 - 变量转换

    在java中变量转发分为两种,隐式转换和强制转换 隐式转换: byte a = 10; int b = 20; byte c = a + b; // 该方法会报错,转换过程中字节数只能从小变大,不能从 ...

  5. 洛谷P2402 奶牛隐藏

    洛谷P2402 奶牛隐藏 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛混乱的原因看题目描述) 题目描述 在一个农场里有n块田地. ...

  6. python+NLTK 自然语言学习处理四:获取文本语料和词汇资源

    在前面我们通过from nltk.book import *的方式获取了一些预定义的文本.本章将讨论各种文本语料库 1 古腾堡语料库 古腾堡是一个大型的电子图书在线网站,网址是http://www.g ...

  7. Jquery 动态添加option 并给option添加数据,并帮定事件

    //添加下拉框 function append_add(data) { $('#add').append( '<div class="form-group" id='+for ...

  8. Python:笔记(3)——面向对象编程

    Python:笔记(3)——面向对象编程 类和面向对象编程 1.类的创建 说明:和Java不同的是,我们不需要显示的说明类的字段属性,并且可以在后面动态的添加. 2.构造函数 构造函数的功能毋庸置疑, ...

  9. 每天一个Linux命令(26)chown命令

          chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组.     (1)用法:     用法:  chown [选项 ...

  10. nova 为何要做互信

    1.计算节点为什么要做nova 的互信? nova 做resize 或者冷迁移需要两台计算节点做互信. 原因:resize(冷迁移)实际上是运行scp 文件到另一台主机上,如下的命令 Command: ...