求解范围中 gcd(a,b)== prime 的有序对数
题目:
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
数对(x,y)有多少对.
输入:
一个整数N。
输出:
如题。
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 的有序对数的更多相关文章
- 利用python求解物理学中的双弹簧质能系统详解
利用python求解物理学中的双弹簧质能系统详解 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的 ...
- 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组
题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明:初始化 nums1 和 nums2 的元素数量分别为 m ...
- iOS开发中GCD在多线程方面的理解
GCD为Grand Central Dispatch的缩写. Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法.在Mac OS X 10.6雪豹中 ...
- 关于多线程中GCD的使用
GCD 分为异步和同步 异步: ```objc dispatch_async ( 参数1 , { } 同步: dispatch_sync( 参数1 , { } ``` ###参 ...
- Swift中GCD与NSOperation相关
GCD Swift 3必看:从使用场景了解GCD新API 常用写法: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_ ...
- iOS中GCD的使用小结
http://www.jianshu.com/p/ae786a4cf3b1 本篇博客共分以下几个模块来介绍GCD的相关内容: 多线程相关概念 多线程编程技术的优缺点比较? GCD中的三种队列类型 Th ...
- 为什么因式分解n=pq分别得到pq是求解密钥中d的关键
从d的来源来说,它是这样来的: "找到一个数d,使得ed-1能够被z整除.即给定e,选择数d,使得ed被z除的余数为1",即 ed=1 (mod z) 上面这句话中,为了求d,我 ...
- 剑指 Offer 30. 包含min函数的栈 + 双栈实现求解栈中的最小值
剑指 Offer 30. 包含min函数的栈 Offer_30 题目描述: 题解分析: 题目其实考察的是栈的知识,本题的目的是使用两个栈来求解最小值. 第二个栈主要用来维护第一个栈中的最小值,所以它里 ...
- C++求解数组中出现超1/4的三个数字。
#include <iostream> using namespace std; //求x!中k因数的个数. int Grial(int x,int k) { int Ret = 0; w ...
随机推荐
- 软件测试人员需要精通的开发语言(3)--- Linux
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.不得不说下,中国产的红旗系统,牛的一逼,造价很贵,但具体何用处估 ...
- easyUI参数传递Long型时,前台解析出错的问题——SKY
果发现datagrid在显示Long类型数据时有问题.问题如下:比如一个数据ID为20121229101239002,经过转换之后的JSON数据也没有问题,但是在显示的时候就会显示为201212291 ...
- sgu 1348 Goat in the Garden 2【点到线段的距离】
链接: http://acm.timus.ru/problem.aspx?space=1&num=1348 http://acm.hust.edu.cn/vjudge/contest/view ...
- 九度OJ 1201:二叉排序树 (二叉树)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4894 解决:2062 题目描述: 输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历. 输入: 输入第一行包括一个整数n(1< ...
- nginx学习之进程控制篇(三)
1. 进程 nginx有一个master进程和一个或多个工作进程. master process worker process or master process worker process wor ...
- jsp联合javascript操作html
1 执行的先后顺序 jsp先处理,给页面里面的变量赋值等等.然后整个页面发送给客户端,在客户端执行javascipt相关的代码. 2 jsp文件的构成 html文件+java程序片段+jsp标签=js ...
- SpringMVC请求流程
Spring结构图 SpringMVC请求流程图 SpringMVC请求流程图语述: request--->DispatcherServler(中央调度器/前端控制器)---> Handl ...
- centos7 使用postgres
1: http://www.cnblogs.com/think8848/p/5877076.html 2:http://blog.csdn.net/xuaa/article/details/52262 ...
- 高性能javascript学习总结(2)--DOM编程
我们知道,对DOM的操作都是非常的耗性能的,那么为什么会耗性能呢? 文档对象模型(DOM)是一个独立于语言的,使用 XML和 HTML 文档操作的应用程序接口(API).在浏览器中,主要与 ...
- NetBeans字体设置
01.找到自己java字体目录.我的目录是[C:\Program Files\Java\jdk1.7.0_21\jre\lib] 02.复制fontconfig.properties.src, 重命名 ...