/**
大意: 给定整数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的更多相关文章

  1. HYSBZ 2818 Gcd【欧拉函数/莫比乌斯】

    I - Gcd HYSBZ - 2818 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample In ...

  2. HYSBZ - 2818 Gcd (莫比乌斯反演)

    莫比乌斯反演的入门题,设 \(F(x): gcd(i,j)\%x=0\) 的对数,\(f(x): gcd(i,j)=x\)的对数. 易知\[F(p) = \lfloor \frac{n}{p} \rf ...

  3. ACM学习历程—HYSBZ 2818 Gcd(欧拉函数 || 莫比乌斯反演)

    Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sam ...

  4. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

  5. BZOJ 2818: Gcd

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4443  Solved: 1960[Submit][Status][Discuss ...

  6. bzoj 2818: Gcd GCD(a,b) = 素数

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1566  Solved: 691[Submit][Status] Descript ...

  7. bzoj 2818: Gcd 歐拉函數

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1633  Solved: 724[Submit][Status] Descript ...

  8. Bzoj 2818: Gcd 莫比乌斯,分块,欧拉函数,线性筛

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 3241  Solved: 1437[Submit][Status][Discuss ...

  9. 2818: Gcd

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2170  Solved: 979[Submit][Status][Discuss] ...

随机推荐

  1. 百度统计和CNZZ到底有哪些不同?

    作为互联网门外汉,同时作为不专业的站长,我总是有很多问题想知道,比如百度统计和CNZZ在数据统计上总是有差异,就好像王婆卖瓜,自卖自夸,又好像公说公有理,婆说婆有理. 作为专业的不专业的市场人员,好奇 ...

  2. [置顶] .NET下枚举类型的Save和Load分析

    今天在写代码的时候,心血来潮对原来的字符串保存状态位的方式很不满意,对于代码里出现了 state == "1" 这样的状态判断很是不爽.那么理想中的判断是怎样的呢?很简单如你所想枚 ...

  3. 自己的第一个android应用(天气)

    主界面代码 package com.example.weather; import android.os.Bundle; import android.app.Activity; import and ...

  4. spring4.1.3+springmvc+mybatis3.2.1整合

    注意:这里使用了mybatis3.2.1版本,刚开始用了3.4.1的版本,会报一个很奇怪的错(java.lang.AbstractMethodError: org.mybatis.spring.tra ...

  5. 关于两次指针(struct型)传参数的问题

    这两天被struct传参给郁闷死了.今天终于解决了. 比如有一个struct如下: struct _ns1__Add_USCORESensorDataArray{ struct xsd__base64 ...

  6. MySql每月增加一个分区以及查询所有分区

    create PROCEDURE Usp_Partition() BEGIN DECLARE _time datetime; DECLARE num int; DECLARE _p VARCHAR(2 ...

  7. mysql xtrabackup 备份恢复实现,mysql命令备份数据库,打包压缩数据库

    简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠 ...

  8. [LeetCode]题解(python):124-Binary Tree Maximum Path Sum

    题目来源: https://leetcode.com/problems/binary-tree-maximum-path-sum/ 题意分析: 给定一棵树,找出一个数值最大的路径,起点可以是任意节点或 ...

  9. ural1057 Amount of degrees 位数统计

    #include <iostream> #include <string> using namespace std; ][]; void init(){ f[][] =; ;i ...

  10. ie6与固定定位fixed,+ 条件注释格式注意

    ie6并不支持position:fixed, ie7+都支持fixed定位, ie6固定定位实现方法1: <!DOCTYPE html> <html> <head> ...