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项和,用分块来做,完毕。

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<math.h>
 6 using namespace std;
 7
 8 typedef long long LL;
 9 const int maxn = 1e7+1;
10 bool s[maxn];
11 int prime[670000],len = 0;
12 int yz[10002],ylen;
13 int mu[maxn];
14 int hxl[maxn];
15 void  init()
16 {
17     memset(s,true,sizeof(s));
18     mu[1] = 1;
19     for(int i=2;i<maxn;i++)
20     {
21         if(s[i] == true)
22         {
23             prime[++len]  = i;
24             mu[i] = -1;
25         }
26         for(int j=1;j<=len && ((long long)prime[j])*i<maxn;j++)
27         {
28             s[i*prime[j]] = false;
29             if(i%prime[j]!=0)
30                 mu[i*prime[j]] = -mu[i];
31             else
32             {
33                 mu[i*prime[j]] = 0;
34                 break;
35             }
36         }
37     }
38 }
39 void solve(int  p)
40 {
41     ylen = 0;
42     int k = (int)sqrt(p*1.0);
43     int tmp;
44     for(int i=1;i<=k;i++)
45     {
46         if(p%i==0)
47         {
48             yz[++ylen] = i;
49             tmp = p/i;
50             if(tmp!=i) yz[++ylen] = tmp;
51         }
52     }
53     for(int i=1;i<=ylen;i++)
54     {
55         for(int j=yz[i],k=1;j<maxn;j=j+yz[i],k++)
56             hxl[j]=hxl[j]+mu[k];
57     }
58     for(int i=2;i<maxn;i++) hxl[i] = hxl[i]+hxl[i-1];
59 }
60 int main()
61 {
62     init();
63     int  p,q,A,B;
64     scanf("%d%d",&p,&q);
65     solve(p);
66     while(q--)
67     {
68         scanf("%d%d",&A,&B);
69         if(A>B) swap(A,B);
70         long long ans1 = 0,ans2 = 0;
71         for(int i=1,la = 0;i<=A; i=la+1)
72         {
73             la = min(A/(A/i),B/(B/i));
74             ans1 = ans1+(long long)(hxl[la]-hxl[i-1])*(A/i)*(B/i);
75         }
76         ans2 = (A/p)*(B/p);
77         printf("%lld %lld\n",ans1,ans2);
78     }
79     return 0;
80 }
81
82 /**************************************************************
83     Problem: 1325
84     User: 987690183
85     Language: C++
86     Result: Accepted
87     Time:1052 ms
88     Memory:92044 kb
89 ****************************************************************/

转载于:https://www.cnblogs.com/tom987690183/p/3950135.html

CSU 1325: A very hard problem 中南月赛的一道题。相关推荐

  1. 中南月赛 1313: ZZY的宠物

    1313: ZZY的宠物 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 114  Solved: 59 [Submit][Status][Web Bo ...

  2. csu 1554: SG Value 思维题

    http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1554 这题在比赛的时候居然没想出来,然后发现居然是做过的题目的变种!!!! 先不考虑插入操作, ...

  3. 十二届 - CSU 1803 :2016(同余定理)

    题目地址:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1803 Knowledge Point: 同余定理:两个整数a.b,若它们除以整数m所 ...

  4. CSU 1805 Three Capitals(矩阵树定理+Best定理)

    http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1805 题意: A和B之间有a条边,A和G之间有b条边,B和G之间有c条边.现在从A点出发走遍所 ...

  5. CSU 1457 Boggle (字典树+DFS)

    题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1457 读了一遍题想到了字典树,但不知道怎么写,队友一个单词一个单词的枚举,然后暴搜过 ...

  6. CSU 1803:2016解题报告

    本来是没有写博客的习惯,结果今天回头看自己A过的题,发现根本看不懂代码了,看着题目也完全没有思路,这就比较尬了,因此打算走上这条不归路. 言归正传,题目链接:http://acm.csu.edu.cn ...

  7. CSU - 1804

    题目链接: http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1804 题解: 用拓扑的思想去进行转移 ,值得注意的是,这里的单个cout一直恒定为 ...

  8. HDLBits: 在线学习 SystemVerilog(五)-Problem 19-23

    HDLBits: 在线学习 SystemVerilog(五)-Problem 19-23 HDLBits 是一组小型电路设计习题集,使用 Verilog/SystemVerilog 硬件描述语言 (H ...

  9. CSUOJ 1196- Staginner 去爬山

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1196 这道题也是搜索题,还是dfs,我们只需对最后一行进行搜索,然后找到能爬到的最高高度即可,每走 ...

最新文章

  1. 其实,咱们程序员过了30岁,还可以更牛逼!
  2. halcon算子盘点:Chapter 12:OCR(光字符识别)
  3. 学生系统优化(三)- -细节优化
  4. 机器人学习--自主移动机器人导论资料(附下载链接)
  5. android如何导入活动,关于android:如何将活动值传递给另一个活动(Kotlin)
  6. 分裂的奶牛群(洛谷P2907题题解,Java语言描述)
  7. 苹果发布紧急公告:老设备11月3日前再不更新就要停止服务啦
  8. mac mysql ngram_mac 下 sphinx + mysql + php 实现全文搜索(xampp)(3)sphinx 的配置项解析...
  9. 个人管理 - 我是这样偷着做架构的
  10. scrapy常用设置参考手册
  11. vis.js绘图库的一个BUG以及源码修正
  12. 5个AIDA64激活密钥
  13. H3CIE(WLAN)学习笔记(3)——802.11帧格式与介质访问规则
  14. 软件测试项目实战,适合大家练习的实战项目有。
  15. 同或门真值表_三输入异或门真值表计算详解
  16. ubuntu与windows双系统的启动项丢失
  17. UltraEdit 21.30.1006.0 繁体中文破解版(功能最强的文本编辑器)
  18. ubuntu 下如何下载linux内核源码
  19. YOLOV3网络结构搭建
  20. 【软考软件评测师】2013综合知识历年真题

热门文章

  1. Java-JSON 解析
  2. jemter编写Mysql脚本___传参
  3. 默认参数,不固定参数 *args,**kwargs
  4. Python django实现简单的邮件系统发送邮件功能
  5. python 登陆开心网图片批量下载-selenium实现
  6. VirtWire 向客服发ticket
  7. .NET 11 个 Visual Studio 代码性能分析工具
  8. 从Asp.net转到Php之调试
  9. Msxml2.XMLHTTP Microsoft.XMLHTTP new XMLHttpRequest
  10. linux bios芯片型号,如何准确判断主板BIOS类型 - 怎么看bios芯片型号_查看bios芯片型号...