题目:http://acm.hdu.edu.cn/showproblem.php?pid=5666

题意:给一条直线x+y=q,在(0,0)往x+y=q上面的整数点连线,x+y=q与x,y轴截成的三角形内部,有多少个整数点,除了直线上的点,q是指数。

思路:首先两点之间的整数点有个公式,设A(x1,y1),B(x2,y2),整数点的个数即为gcd(|x1-x2|,|y1-y2|)-1;注意到三角形是一个等腰直角三角形并且三角形在第一象限,所以假设直线x+y=q上面的一个点,C(x,q-x);那么从原点连到这个点上的整数点的个数即为gcd(x,q-x),因为q是质数,设gcd(x,q)=c,那么存在两个互质的数m,n使得m*c=x,n*c=q,那么q-x=(m-n)*c,因为m,n互质,没有任何一个大于一的整数能同时整除这两个数,所以(m-n)跟m还是互质,所以gcd(q-x,x)=gcd(x,q);又因为q是质数,且x<=q,所以gcd(x,q-x)=gcd(x,q)=1,即连线上不会经过三角形内部的点,所以答案就是三角形内部的点的个数,三角形内包括三角形上面的点,一共有(q+1)+(q)+(q-1)+...+1,即(q+2)*(q+1)/2,又因为三角形的边上有3*q个点,所以三角形内部有(q-2)*(q-1)/2个点,好,我以为,这个时候我做完了,最后不就是模P的时候处理一下就好了吗,交一发直接WA,看了一下数据范围:2≤q≤10^18,1≤P≤10^18,1≤T≤10。生无可恋,就算运算的时候取模了还是会爆long long的,用一个大数模板,又一次WA了,最后模仿快速幂的形式写了一个快速积,即边加边取模,过了。。。

代码:

 #include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <cstring>
using namespace std;
long long mul(long long a,long long b,long long mod)
{
long long ans=;
a%=mod;
while(b>)
{
if(b%==)ans=(ans+a)%mod;
b/=;
a=(a+a)%mod;
}
return ans;
}
int main()
{ int t;
long long int p,q;
scanf("%d",&t);
while(t--)
{ scanf("%lld %lld",&q,&p); long long int ans1=(q-);
long long int ans2=(q-);
if(ans1%==)
ans1/=;
if(ans2%==)
ans2/=; printf("%lld\n",mul(ans1,ans2,p));
}
return ;
}

快速积

 long long  mul(long long  a,long long  b,long long  mod)
{
long long ans=;
a%=mod;
while(b>)
{
if(b&)
ans=(ans+a)%mod;
a=(a+a)%mod;
b>>=;
}
return ans;
}

HDOJ 5666//快速积,推公式的更多相关文章

  1. CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)

    问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...

  2. HDU6050: Funny Function(推公式+矩阵快速幂)

    传送门 题意 利用给出的式子求\(F_{m,1}\) 分析 直接推公式(都是找规律大佬) \(n为偶数,F_{m,1}=\frac{2(2^n-1)^{m-1}}3\) \(n为奇数,F_{m,1}= ...

  3. Uint47 calculator【map数组+快速积+各种取余公式】

    Uint47 calculator 题目链接(点击) In the distant space, there is a technologically advanced planet. One day ...

  4. HDOJ(HDU).2044-2049 递推专题

    HDOJ(HDU).2044-2049 递推专题 点我挑战题目 HDU.2044 题意分析 先考虑递推关系:从1到第n个格子的时候由多少种走法? 如图,当n为下方格子的时候,由于只能向右走,所以有2中 ...

  5. 2019牛客多校第二场 A Eddy Walker(概率推公式)

    2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ...

  6. HDU 4873 ZCC Loves Intersection(JAVA、大数、推公式)

    在一个D维空间,只有整点,点的每个维度的值是0~n-1 .现每秒生成D条线段,第i条线段与第i维度的轴平行.问D条线段的相交期望. 生成线段[a1,a2]的方法(假设该线段为第i条,即与第i维度的轴平 ...

  7. HDU 4870 Rating(概率、期望、推公式) && ZOJ 3415 Zhou Yu

    其实zoj 3415不是应该叫Yu Zhou吗...碰到ZOJ 3415之后用了第二个参考网址的方法去求通项,然后这次碰到4870不会搞.参考了chanme的,然后重新把周瑜跟排名都反复推导(不是推倒 ...

  8. HDU 5047 推公式+别样输出

    题意:给n个‘M'形,问最多能把平面分成多少区域 解法:推公式 : f(n) = 4n(4n+1)/2 - 9n + 1 = (8n+1)(n-1)+2 前面部分有可能超long long,所以要转化 ...

  9. bjfu1211 推公式,筛素数

    题目是求fun(n)的值 fun(n)= Gcd(3)+Gcd(4)+…+Gcd(i)+…+Gcd(n).Gcd(n)=gcd(C[n][1],C[n][2],……,C[n][n-1])C[n][k] ...

随机推荐

  1. mybatis入门 配置文件解释 及测试

    这里介绍一下mybatis  根据mybatis的官网说明,mybatis是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置 ...

  2. 最短路DAG

    边权皆为正时,有最短路DAG. 最短路DAG代表了从原点到每个点的所有最短路. 最短路树个数=最短路DAG生成树个数.用DAG生成树计数即可.复杂度\(O(n+m)\).

  3. IntelliJ IDEA/WebStrom破解及JDK配置

    title: IntelliJ IDEA/WebStrom破解及JDK配置 (一)破解 破解步骤 第一步:下载破解补丁 第二步:修改配置文件 第三步:重启IntelliJ IDEA/WebStrom填 ...

  4. Python技术之书籍汇总

    近日,一直在学习Python,发现有关的书籍还是很多值得一读的,所以在此总结一下.以后慢慢去研读吧!!! Python入门 <Python编程快速上手——让繁琐工作自动化> 作者: [美] ...

  5. [官网]CREATE EXTENSION PostGreSQL 创建函数的方法

    CREATE EXTENSION https://www.postgresql.org/docs/current/sql-createextension.html CREATE EXTENSION — ...

  6. Day3-2 函数之递归

    递归 定义:一个函数在 内部调用自己,就称为递归. # 如何让10不停的除以2,直到不能除为止. n = 10 while True: n = int(n /2) print(n) if n == 0 ...

  7. java回调机制——基本理解

    回调(diao):往回调用,反向调用. 英文 call back.call:调用,back:返回,往返. 回调的意思就是杀个回马枪...... 回调(callback),既然是往回调用,那自然有一个正 ...

  8. hive字符函数

  9. C# 将当前应用程序写入到注册表开机启动项中

    在使用C#进行应用程序的开发过程中,经常有一个需求就是让应用程序开机后自动启动,这个是一个很常见的需求,最常规的做法(这里以Win7操作系统为例),打开:开始=>所有程序=>启动文件夹(路 ...

  10. js外部调用layui.use中的函数的写法

    layui模块化的写法固然不错,但也有让人不适应的一些地方 外部调用函数的写法就让人不太舒服 需要在函数名前面加上window这个前缀,就不太舒服 补充:window前缀,是全局变量的声明方式 如下: ...