HYSBZ 2818 gcd
/**
大意: 给定整数N,1<= x,y <= N 求解有多少gcd(x,y) 为素数 n=10^7
思路: 首先考虑到n 如此之大,用的快速求欧拉函数。
先默认 y〉x
分析: gcd(x,y) =2, gcd(x,y) = 3, gcd(x,y) = 5, gcd(x,y) = 7。。。。
即 gcd(x,y/2) =1, gcd(x, y/3) =1, gcd(x, y/5) =1, gcd(x,y/7) = 1 。。。。
以gcd(x,y) = 2 为例 -----> gcd(x,y/2) = 1;
就是求比y/2小的所有与y/2 互质数的个数。。。y取值为2,4,6,8,10.。。。
所以siga(gcd(x,2)=2 + gcd(x,4) =2 + gcd( x,6) =2 + 。。。)=
----->siga(gcd(x,1)=1 + gcd(x,2) =1 + gcd( x,3) =1 + 。+ gcd(x,n/2)=1)
其他的同理。。。
所以先预处理 小于n 的所有互质数的个数 s[i] = s[i-1]+phi[i];
使用时
if(n>=prime[i]){
ans += 2*s[n/prime[i]]-1; (也有可能x 〉y)
}
**/ #include <iostream>
#include <cstring>
#include <algorithm>
using namespace std; #define Max 10000000 long long s[Max+],f[Max+],phi[Max+];
int prime[Max/];
bool flag[Max+];
int num;
void init()
{
int i,j;
num=;
memset(flag,,sizeof(flag));
phi[]=;
for(i=;i<=Max;i++){//欧拉筛选
if(flag[i])
{
prime[num++]=i;
phi[i]=i-;
}
for(j=;j<num && prime[j]*i<=Max;j++)
{
flag[i*prime[j]]=false;
if(i%prime[j]==)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else phi[i*prime[j]]=phi[i]*(prime[j]-);
}
}
s[] =;
for(int i=;i<Max;i++)
s[i] = s[i-]+phi[i];
} int main(){
init();
long long n;
while(cin>>n){
long long ans =;
for(int i=;i<num;i++)
if(n>=prime[i]){
ans += *s[n/prime[i]]-;
}
cout<<ans<<endl;
}
}
HYSBZ 2818 gcd的更多相关文章
- HYSBZ 2818 Gcd【欧拉函数/莫比乌斯】
I - Gcd HYSBZ - 2818 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample In ...
- HYSBZ - 2818 Gcd (莫比乌斯反演)
莫比乌斯反演的入门题,设 \(F(x): gcd(i,j)\%x=0\) 的对数,\(f(x): gcd(i,j)=x\)的对数. 易知\[F(p) = \lfloor \frac{n}{p} \rf ...
- ACM学习历程—HYSBZ 2818 Gcd(欧拉函数 || 莫比乌斯反演)
Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sam ...
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ...
- BZOJ 2818: Gcd
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4443 Solved: 1960[Submit][Status][Discuss ...
- bzoj 2818: Gcd GCD(a,b) = 素数
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1566 Solved: 691[Submit][Status] Descript ...
- bzoj 2818: Gcd 歐拉函數
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1633 Solved: 724[Submit][Status] Descript ...
- Bzoj 2818: Gcd 莫比乌斯,分块,欧拉函数,线性筛
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 3241 Solved: 1437[Submit][Status][Discuss ...
- 2818: Gcd
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2170 Solved: 979[Submit][Status][Discuss] ...
随机推荐
- HDU 4983 Goffi and GCD
题目大意:给你N和K,问有多少个数对满足gcd(N-A,N)*gcd(N-B,N)=N^K.题解:由于 gcd(a, N) <= N,于是 K>2 都是无解,K=2 只有一个解 A=B=N ...
- python import 自己的包
在写python时,有时候写的一个python文件可能需要被其他python文件所用,那么可以用导入包 import 的 方式: 1.自己写的包放到哪里? >>> import sy ...
- 迭代器(iterators)
1.迭代器的概念 迭代器是一种抽象的设计概念.在设计模式中,迭代器模式定义为:提供一种方法,使之能够依序访问某个容器中所含的各个元素,而又无需暴露该容器的内部组织结构. 迭代器可以看做一种行为类似指针 ...
- 优化器的使用oracle ---explain plan
如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题. 如果一条SQL平时执行的好好的,却有一天突然性能很差,如果排除了系统资源和阻塞的原因,那么基本可以 ...
- 关于两次指针(struct型)传参数的问题
这两天被struct传参给郁闷死了.今天终于解决了. 比如有一个struct如下: struct _ns1__Add_USCORESensorDataArray{ struct xsd__base64 ...
- java 类排序
参考文档:Java排序: Comparator vs Comparable 入门 java类经常面临排序问题,据我所知:java提供comparable和comparator两种比较方式: 1. co ...
- linux 命令大全
工作了一段时间,开始整理资料,好记性不如烂笔头啊. linux命令大全下载路径: 1.http://www.pc6.com/SoftView/SoftView_28912.html 2.http:// ...
- 新唐M0特点分析
1,价格低,05x系列0.6-1.5美金,1xx系列1.5-3.5美金:2,性能好,最新32位CORTEX-M0的ARM核,唯一可工作到+5.5V的CORTEX-M0:3,速度快,CPU核能跑到50M ...
- AttributeError: 'module' object has no attribute 'Thread'
$ python thread.py starting at: 2015-08-05 00:24:24Traceback (most recent call last): File "th ...
- JAVA FILE or I/O学习 - Desktop本地程序学习
public class DesktopKnow { public void know() { try { Desktop.getDesktop().open(new File("C:\\P ...