中文题

题意:

思路:

1、观察可得 模m的同余系和m的gcd都相同(这题多了一个c也是相同的)

2、由于取证所以不能用简单的用O(m^2)的做法,涉及到多1少1的

3、打表观察,例如i为模9为7的数 j为9

则i*j/f(i,j) 有这样的规律:

括号内为相邻值的差,而这个差是有循环节的,也就意味着,这可以看作4个等差数列。

又发现f(i,j)的c为4。

然后就大胆猜测c就是循环节。又试了几个数,果然是这样。

//不过很巧的是,循环节有一点小规律,但是没有仔细想,说不定可以有O(m^2)的做法

然后gcd的计算次数是log级别的,所以总的复杂度就是O(T*m^2*log(m))

//不过我的程序跑得不是很快。几乎是卡时间过的

具体细节看代码:

 LL f(int x, int y, int& g, int& c)
{
c = ;
int t;
while (y)
{
c++;
t = x % y;
x = y;
y = t;
}
g = x;
return x * x * c;
} int n, m, p;
void init()
{
get_int(n);
get_int(m);
get_int(p);
} void solve()
{
int ans = , g, c;
for (int j = ; j <= m; j++)
{
for (int i = ; i <= j && i <= n; i++)
{
LL ff = f(i, j, g, c);
for (int k = ; k < c; k++)
{
if (i + k * j > n) break;
LL a0 = (i + k * j) * j / ff;
LL d = c * j * j / ff;
LL num = (n - (i + k * j)) / (c * j) + ;
ans = ((ans + a0 * num) % p + num * (num - ) / % p * d % p) % p;
}
}
}
printf("%d\n", ans);
} int main()
{
int T;
get_int(T);
while (T--)
{
init();
solve();
}
return ;
}

HDU 5970 最大公约数的更多相关文章

  1. HDU - 5970 题解

    题目链接 HDU - 5970 分析 很显然\(f(x,y)\)与\(f(x+y*k,y)\)的结果相同,因为它们在第一次取模后会变成相同的式子 我们再看一下数据的范围,突破口肯定在\(m\)那里 那 ...

  2. HDU 1222 - Wolf and Rabbit & HDU 1108 - [最大公约数&最小公倍数]

    水题,只是想借此记一下gcd函数的模板 #include<cstdio> int gcd(int m,int n){return n?gcd(n,m%n):m;} int main() { ...

  3. HDU 2504 又见GCD(最大公约数与最小公倍数变形题)

    又见GCD Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  4. HDU 2503 a/b + c/d(最大公约数与最小公倍数,板子题)

    话不多说,日常一水题,水水更健康!┗|`O′|┛ 嗷~~ a/b + c/d Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768 ...

  5. hdu 4630 查询[L,R]区间内任意两个数的最大公约数

    No Pain No Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. hdu 5656 CA Loves GCD(n个任选k个的最大公约数和)

    CA Loves GCD  Accepts: 64  Submissions: 535  Time Limit: 6000/3000 MS (Java/Others)  Memory Limit: 2 ...

  7. HDU 1713 最小公倍数与最大公约数的问题 相遇周期

    欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) 相遇周期 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/ ...

  8. HDOJ(HDU) 2504 又见GCD(利用最大公约数反推)

    Problem Description 有三个正整数a,b,c(0 import java.util.Scanner; public class Main{ public static void ma ...

  9. HDOJ(HDU) 2503 a/b + c/d(最大公约数问题)

    Problem Description 给你2个分数,求他们的和,并要求和为最简形式. Input 输入首先包含一个正整数T(T<=1000),表示有T组测试数据,然后是T行数据,每行包含四个正 ...

随机推荐

  1. c++ redis-client

    http://hahaya.github.io/operator-redis-under-linux/#0-tsina-1-10809-397232819ff9a47a7b7e80a40613cfe1 ...

  2. linux -a 到 -z 的意义

    shell if判断中常用的也就是绿色部分,尾部部分越看越不懂.从百度文库转载. [ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则 ...

  3. sac 文档使用

    目前我遇到的问题是我想要得到BHE,BHN 方向的数据,但发现IRIS下载的数据都是BH1,BH2 方向的,很困惑,请教大神后发现,原来IRIS之所以提供BH1,BH2方向是因为很多时候台站的水平方向 ...

  4. sql语句查询最近七天 三十天 数据

    几个小时内的数据 DATE_SUB(NOW(), INTERVAL 5 HOUR) 今天 select * from 表名 where to_days(时间字段名) = to_days(now()); ...

  5. spring实现一对多表单的保存

    现在我已经从ios转行为java了呦吼吼吼~~~ 1.先来一张界面,项目的字段太多了,为了研究知识点我做了个潘长江版的

  6. php 数据库备份、还原

    1. mydb.php //DB类 2. backup.php //备份脚本 3. restore.php //还原脚本 mydb.php <? class db{ var $linkid; v ...

  7. 数据导出到excel

    jsp页面: 数据table: <form action="/export.jsp" method="post" id="expform&quo ...

  8. Linux下swoole的安装配置

    前几天搭建swoole环境,在安装php的swoole扩展时不知道什么原因,提示成功,但是使用的时候不能加载,最后决定重新安装php试试,顺便记录了php的安装过程 wget http://cn2.p ...

  9. Java命名规则总结

    1. JAVA源文件的命名 JAVA源文件名必须和源文件中所定义的类的类名相同. 2. Package的命名 Package名的第一部分应是小写ASCII字符,并且是顶级域名之一,通常是com.edu ...

  10. HDU 5441 离线处理 + 并查集

    题意:给n个节点m条带权值边的无向图.然后q个问题,每次询问点对的数目,点对需要满足的条件是:1)连通:2)其路径的最大权值不能超过询问值. 分析:如果没次询问一次,dfs一次,很可能超时,因此可以用 ...