【河北省队互测】 gcd BZOJ 2818
Description
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
数对(x,y)有多少对.
Input
一个整数N
Output
如题
Sample Input
Sample Output
HINT
hint
对于样例(2,2),(2,4),(3,3),(4,2)
1<=N<=10^7
思路
最近看了很多关于gcd和mod的题目。
通过最近几道题目了解了很多=。=
首先有这么一个性质:如果a∈[1,n],b∈[1,m],那么gcd(a,b)|k的有(n/k)*(m/k)组。
那么令f[x]为gcd(a,b)==k的组数,f[k]=(n/k)*(m/k)-f[2k]-f[3k]-f[4k]……
对于这一题来说。。好像是并不可以过的。
那么就有别的性质:
如果a,b∈[1,n],gcd(a,b)==k的组数等价于a,b∈[1,n/k],gcd(a,b)==1的组数。
这就很好求了吧,就是1->n的phi值之和(欧拉函数)*2-1。
首先每组数必须要算两遍,比如(3,5)和(5,3),所以要*2。然后(1,1)不要算两遍,所以再-1。
然后就是如何求出1-n中所有的质数以及欧拉函数了。现场学习线性筛。。
其实我完全不理解啊。。先记住好了。。核心代码如下:
phi[]=;memset(is_prime,true,sizeof(is_prime));
for(int i=;i<=n;i++){
if (is_prime[i]){
phi[i]=i-;
prime[++cnt]=i;
}
for(int j=;j<=cnt&&i*prime[j]<=n;j++){
is_prime[i*prime[j]]=false;
if (i%prime[j]!=) phi[i*prime[j]]=phi[i]*(prime[j]-);
else{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
}
}
线性筛
应该没写错吧。。为了加强记忆默写的。。如果有问题就看下面的那个版本吧,那个是AC了的。
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <list>
#include <vector>
#include <ctime>
#include <functional>
#define pritnf printf
#define scafn scanf
#define sacnf scanf
#define For(i,j,k) for(int i=(j);i<=(k);(i)++)
#define Clear(a) memset(a,0,sizeof(a))
using namespace std;
typedef unsigned int Uint;
const int INF=0x3fffffff;
///==============struct declaration============== ///==============var declaration=================
const int MAXN=;
int n,tot=,ans=;
int prime[MAXN];
long long phi[MAXN];
bool is_prime[MAXN];
///==============function declaration============
void Init();
///==============main code=======================
int main()
{
//#define FILE__
#ifdef FILE__
freopen("input","r",stdin);
freopen("output","w",stdout);
#endif
scanf("%d",&n);
Init();
for(int i=;i<=n;i++) phi[i]+=phi[i-];
long long ans=;
for(int i=;i<=tot;i++)
ans+=phi[n/prime[i]]*-;
printf("%lld\n",ans);
return ;
}
///================fuction code====================
void Init(){
memset(is_prime,true,sizeof(is_prime));phi[]=;
for(int i=;i<=n;i++){
if (is_prime[i]){
phi[i]=i-;
prime[++tot]=i;
}
for(int j=;j<=tot;j++){
if (i*prime[j]>n) break;
is_prime[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]-);
}
}
}
BZOJ2818
不要问我那些性质是为什么。。我也布吉岛(╯‵□′)╯︵┻━┻
【河北省队互测】 gcd BZOJ 2818的更多相关文章
- GCD BZOJ2818 [省队互测] 数学
题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入样例#1: 复制 4 ...
- 题解 P6271 [湖北省队互测2014]一个人的数论
通过这道题学了伯努利数,写篇题解推一下 题目 先推一下式子 \[\sum_{i=1}^ni^d[gcd(i,n)=1] \] \[\sum_{i=1}^{n}i^d\sum_{k|i}\sum_{k| ...
- [bzoj3670][2014湖北省队互测week2]似乎在梦中见过的样子
Description 已知一个字符串S,求它有多少个形如A+B+A的子串(len(A)>=k,len(B)>=1 ). Input 第一行一个字符串,第二行一个数 k. Output 仅 ...
- bug运输[辽宁2014年省队互测一]
奇奇怪怪的题目,不知道他要我们干什么. 我们观察一波局势,发现答案最大不过5.因为如果答案是6或以上的话,我们就至少要2^(5*5)个5*5的方格. 仔细计算一波时间复杂度,再信仰一波,坚信暴力压正解 ...
- STOI补番队互测#2
Round2轮到我出了>_<(目测总共10人参加 实际共七人) 具体情况: #1: KPM,360 #2:ccz181078,160 #3:child,150 可惜KPM没看到第一题样例里 ...
- BZOJ 2818: Gcd
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4443 Solved: 1960[Submit][Status][Discuss ...
- Bzoj 2818: Gcd 莫比乌斯,分块,欧拉函数,线性筛
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 3241 Solved: 1437[Submit][Status][Discuss ...
- Bzoj 2818: Gcd(莫比乌斯反演)
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对 ...
- BZOJ 2818
2818:GCD Description 给定整数$N$,求$1\le x,y\le N$且$\gcd{x,y}$为素数的数对$(x,y)$有多少对. Input $N$ Output RT Samp ...
随机推荐
- FineUI(开源版)v4.2.2发布(8年125个版本,官网示例突破300个)!
开源版是 FineUI 的基石,从 2008 年至今已经持续发布了 120 多个版本,拥有会员 15,000 多位,捐赠会员达到 1,200 多位. FineUI(开源版)v4.2.2 是 8 年 ...
- 【MySQL】mysql分页调用
存储过程: CREATE DEFINER=`root`@`%` PROCEDURE `Proc_PageCondition`(p_cloumns varchar(500), p_tables varc ...
- Python--基础知识
- TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)
状态说明 SYN表示建立连接, FIN表示关闭连接, ACK表示响应, PSH表示有 DATA数据传输, RST表示连接重置. 其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同 ...
- NC6开发配置流程
1.功能注册 2.菜单注册 3.单据类型管理 4.单据模板初始化 5.查询模板初始化 6.功能节点默认模板设置 7.编码对象注册.编码规则定义
- blog (后续更新)
设计Model(设计数据库) from django.db import models # Create your models here. class BlogsPost(models.Model) ...
- ABP模块化
基于Abp模块化.插件化的设计,开发人员可以将自定义的功能以模块的形式集成到项目中. 模块的加载 模块: 插件: 模块及插件的加载路线: 1. 扩展的HttpApplication对象(在Abp.We ...
- asp.net mvc 权限过滤和单点登录(禁止重复登录)
1.权限控制使用controller和 action来实现,权限方式有很多种,最近开发项目使用控制控制器方式实现代码如下 /// <summary> /// 用户权限控制 /// < ...
- <Script>放置位置
html文件是自上而下的执行方式 css引入执行加载时,程序仍然往下执行 script脚本是则中断线程,待该script脚本执行结束之后程序才继续往下执行 页面效果实现类的js放在body之前,动作, ...
- 架构师养成记--14.重入锁ReentrantLock 和 读写锁 ReentrantReadWriteLock
ReentrantLock 有嗅探锁定和多路分支等功能,其实就是synchronized,wait,notify的升级. this锁定当前对象不方便,于是就有了用new Object()来作为锁的解决 ...