CSU 1325: A very hard problem 中南月赛的一道题。
1325: A very hard problem
Time Limit: 3 Sec Memory Limit: 160 MB
Submit:
203 Solved: 53
[Submit][Status][Web
Board]
Description
CX老湿经常被人黑,被黑得多了,自己也就麻木了。于是经常听到有人黑他,他都会深情地说一句:禽兽啊!
一天CX老湿突发奇想,给大家出了一个难题,并且声称谁能够准确地回答出问题才能继续黑他,否则他就要反击了。
这个难题就是:
给出两个数p和q,接下来q个询问,每个询问给出两个数A和B,请分别求出:
一、有多少个有序数对(x,y)满足1<=x<=A,1<=y<=B,并且gcd(x,y)为p的一个约数;
二、有多少个有序数对(x,y)满足1<=x<=A,1<=y<=B,并且gcd(x,y)为p的一个倍数。
Input
只有一组测试数据。
第一行两个数:p和q。(1<p<10^7 ,1<q<1000。)
接下来有q行,每行两个数A和B。(1<A,B<10^7)
Output
输出共q行。每行两个数。用空格隔开。
分别表示题目描述中的两个对应的答案。
(x,y)=(2,3)和(x,y)=(3,2)被视为两个不同有序数对哦!
Sample Input
6 3
8 8
15 32
13 77
Sample Output
58 1
423 10
883 24
HINT
对于64位整型请用lld,或者cin,cout。T_T
CSU_LQ
这一道题是去年的一次比赛的题,当时觉得用欧拉能做,然后很难实现。
后来知道用莫比乌斯反演来做,但是一直超时。已经使用分块了,还是超时。
题意:略
思路:对于第二种,直接(A/p)*(B/p)就是答案。不难理解。
对于第一种情况:
设
g(p)代表枚举P的每一因子 di 求gcd(x,y)=di (1<=x<=A,1<=y<=B)的累加和。
就是题意要求的值。
如果此时,枚举每一个P的因子di 来求,就会超时。
这个式子可以转化一下,另T = di*x,那么式子可以转化为:
这样的话,我们只需要先预处理后一部分,就可以用sqrt(min(A,B)) 的时间解决这个问题。
这部分如何预处理呢?
首先我们先打表求出u[];
分析这个式子,设tom(T) = sigma(u[di],T%di==0&&di是P的因子);
由于p是唯一的,我们求出它的因子,然后用它的因子筛选一下数组hxl[ ] ,就是tom(T);
最后hxl[],前n项和,用分块来做,完毕。
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<math.h>
using namespace std; typedef long long LL;
const int maxn = 1e7+;
bool s[maxn];
int prime[],len = ;
int yz[],ylen;
int mu[maxn];
int hxl[maxn];
void init()
{
memset(s,true,sizeof(s));
mu[] = ;
for(int i=;i<maxn;i++)
{
if(s[i] == true)
{
prime[++len] = i;
mu[i] = -;
}
for(int j=;j<=len && ((long long)prime[j])*i<maxn;j++)
{
s[i*prime[j]] = false;
if(i%prime[j]!=)
mu[i*prime[j]] = -mu[i];
else
{
mu[i*prime[j]] = ;
break;
}
}
}
}
void solve(int p)
{
ylen = ;
int k = (int)sqrt(p*1.0);
int tmp;
for(int i=;i<=k;i++)
{
if(p%i==)
{
yz[++ylen] = i;
tmp = p/i;
if(tmp!=i) yz[++ylen] = tmp;
}
}
for(int i=;i<=ylen;i++)
{
for(int j=yz[i],k=;j<maxn;j=j+yz[i],k++)
hxl[j]=hxl[j]+mu[k];
}
for(int i=;i<maxn;i++) hxl[i] = hxl[i]+hxl[i-];
}
int main()
{
init();
int p,q,A,B;
scanf("%d%d",&p,&q);
solve(p);
while(q--)
{
scanf("%d%d",&A,&B);
if(A>B) swap(A,B);
long long ans1 = ,ans2 = ;
for(int i=,la = ;i<=A; i=la+)
{
la = min(A/(A/i),B/(B/i));
ans1 = ans1+(long long)(hxl[la]-hxl[i-])*(A/i)*(B/i);
}
ans2 = (A/p)*(B/p);
printf("%lld %lld\n",ans1,ans2);
}
return ;
} /**************************************************************
Problem: 1325
User: 987690183
Language: C++
Result: Accepted
Time:1052 ms
Memory:92044 kb
****************************************************************/
CSU 1325: A very hard problem 中南月赛的一道题。的更多相关文章
- 中南月赛F ZZY and his little friends
Problem F: ZZY and his little friends Time Limit: 5 Sec Memory Limit: 256 MBSubmit: 137 Solved: 70 ...
- 中南月赛 B题 Scoop water
Problem B: Scoop water Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 261 Solved: 57[Submit][Status ...
- CSU 1325 莫比乌斯反演
题目大意: 一.有多少个有序数对(x,y)满足1<=x<=A,1<=y<=B,并且gcd(x,y)为p的一个约数: 二.有多少个有序数对(x,y)满足1<=x<=A ...
- CSU OJ 1340 A Sample Problem
Description My girlfriend loves 7 very much, she thinks it is lucky! If an integer contains one or m ...
- 中南月赛 1313: ZZY的宠物
1313: ZZY的宠物 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 114 Solved: 59[Submit][Status][Web Boar ...
- 2019年4月zstu月赛A: 我不会做
问题 A: 我不会做 时间限制: 1 Sec 内存限制: 128 MB 题目描述 众所周知,duxing201606就是plw. 然而已经9102年了,plw仍旧没有npy.plw非常难过,于是他打 ...
- CSU 1808 - 地铁 - [最短路变形]
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1808 Time limit: 5000 ms Memory limit: 13107 ...
- CSU 1809 - Parenthesis - [前缀和+维护区间最小值][线段树/RMQ]
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1809 Bobo has a balanced parenthesis sequenc ...
- CSU 1804 - 有向无环图 - [(类似于)树形DP]
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1804 Bobo 有一个 n 个点,m 条边的有向无环图(即对于任意点 v,不存在从点 ...
随机推荐
- SLF4J环境变量配置
因部分程序需要,需要把SLF4J加入到环境变量中. 添加位置:CLASSPATH 添加信息如下: C:\slf4j-1.7.19\slf4j-nop-1.7.19.jar;
- archlinux 网络配置
https://wiki.archlinux.org/index.php/Network_configuration_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%2 ...
- 《zw版·Halcon-delphi系列原创教程》halconxlib控件列表
<zw版·Halcon-delphi系列原创教程>halconxlib控件列表 Halcon v11.01版,com控件,安装后,共有75个控件, 不过最重要的控件,只有两个,T ...
- 【fedora】设置中文为默认语言
安装Fedora时,界面语言是英语,手动安装简体中文语言包: 1.打开终端,执行yum install system-config-language命令来安装语言套件: 2.然后执行system-co ...
- NOIP201401珠心算测验
珠心算测验 问题描述] 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及. 某学校的珠心算老师采用 ...
- YUI3 CSS
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- 文字处理TX Text Control X10独家揭秘(二):图像占位符合并
在前面一篇文章<TX Text Control X10独家揭秘(一):数据源自动处理>中已经对即将发布的TX Text Control X10的数据源自动处理做了一些了解,接下来述说它的图 ...
- TVideoGrabber如何并行处理多摄像头
大家都知道 TVideoGrabber是一款支持包括C#..NET.VB.NET.C++.Delphi.C++Builder和ActiveX平台在内的视频处理控件,可以捕捉视频,也可以作为多媒体播放器 ...
- Mongodb 笔记06 副本集的组成、从应用程序连接副本集、管理
副本集的组成 1. 同步:MongoDB的复制功能是使用操作日志oplog实现的,操作日志包含了主节点的每一次写操作.oplog是主节点的local数据库中的一个固定集合.备份节点通过查询整个集合就可 ...
- Mysql服务器相互作用的通讯协议包括TCP/IP,Socket,共享内存,命名管道
MySQL实现了四种通信协议 TCP/IP协议,通常我们通过来连接MySQL,各种主要编程语言都是根据这个协议实现了连接模块 Unix Socket协议,这个通常我们登入MySQL服务器中使用这个协议 ...