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] ...
随机推荐
- D3.js学习记录 - 数据类型【转】【新】
1.变量 JAVASCRIPT的变量是一种类型宽松的语言.定义变量不用指定数据类型.而且还是动态可变的. var value = 100;value = 99.9999;value = false;v ...
- 每天学点Linux:二
关于输入输出和重定向: 默认情况下标准I/O的输入为键盘,输出为显示屏.输入和输出可以通过符号‘>’进行重定向. 例如可以通过命令:$>newfile 来创建一个新文件(如果newfile ...
- android UI跨线程操作
android应用程序也是单线程程序,主线程为UI线程. android 线程是非安全的,即不要在子线程中更新 UI. public class MasterActivity extends Acti ...
- iframe跨域通信方案
概述 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.这里把涉及到跨域的一些问题简单地整理一下: 首先什么 ...
- c# 遍历文件夹及其所有文件
利用VS创建一个winform应用程序,遍历指定文件夹(photos)内的所有文件夹及其文件.具体程序如下: namespace 遍历文件夹及其所有文件 { public partial class ...
- Java中布尔类型操作符&=,|=与^=的使用
今天在对同事的代码进行code review的时候,见到一个比较好玩的写法.“flag &= false:”,乍一看,还感觉他写错了,但是程序可以正常运行,赶紧去百度,看一下这个写法到底是怎么 ...
- 使用PHP实现用户登录和注册的功能
登陆界面 login.php <form action="logincheck.php" method="post"> 用户名:<input ...
- 一周学会Mootools 1.4中文教程:(2)函数
温故: 透过对上一节课的学习,相信大家对mt的选择器应该有了一定的认识了,我再放几个小示例让大家对选择器的复杂应用有所了解: <!DOCTYPE html PUBLIC "-//W3C ...
- 4.PHP 教程_PHP 变量
PHP 变量 变量是用于存储信息的"容器": <?php $x = 5; $y = 6; $z = $x + $y; echo $z; ?> 与代数相似 x=5 y=6 ...
- 帝国cms <!--list.var1-->,<!--list.var2-->的终极用法
谢寒原创,转载注明. 在制作帝国cms列表时,如果我们希望同每篇文章之后就会有一条横线,或者分线代码,我们就需要用到多个<!--list.var—> 比如我们需要这样的效果 文章1 文章 ...