hdu5666 (数学水题)
来源:互联网 发布:java lang包 编辑:程序博客网 时间:2024/06/10 07:16
标准解释:
考虑一条以(0,0)为起点,(x,y)为终点的线段上格点的个数(不包含端点时),
一定是gcd(x,y)−1,这个很显然吧.
然后整个网格图范围内的格点数目是2(q-1)∗(q−2).
所以答案就是2q-1)∗(q−2)− 所有线段上的格点的个数.
因为gcd(a,b)=gcd(a,b−a) (b>a),
所以gcd(x,y)=gcd(x,p−x)=gcd(x,p),p是质数,所以gcd(x,y)=1,
所以线段上都没有格点,所以答案就是2q-1)∗(q−2).
比赛的时候我是通过画图然后递推退出来这个结果的。
接下来就是求((q-1)*(q-2)/2) % p 了,并且,这个都不是质数。
有套路的,看代码。
#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>using namespace std;#define LL long long#define INF 0x3f3f3f3f3LL multiply(LL n , LL m , LL mod){LL sum = 0 ; while(m){if(m&1){sum += n ; sum %= mod ; }m >>= 1 ; n *= 2 ; n %= mod ; }return sum ; }int main(){int t ; LL q,p ; scanf("%d",&t);while(t--){scanf("%I64d%I64d",&q,&p) ;printf("%I64d\n",multiply((q-1),(q-2),2*p)/2) ; }return 0 ; }
0 0
- hdu5666 (数学水题)
- hdu5666
- HDU5666-Segment
- hdu5666 BestCoder Round #80
- hdu5666 Segment (俄罗斯乘法)
- BestCoder Round #80 (hdu5665,hdu5666,hdu5667(矩阵快速幂+费马小定理),hdu5668(中国剩余定理))
- 1004 Financial Management(数学水题)
- 数学水题
- HDU1065(数学水题)
- Equations(数学,水)
- zzulioj--1841--so easy!麻麻再也不用担心我的数学了!(数学水题)
- hdu 1017数学水题
- uva-10161水题数学
- hdu5387 Clock(数学水题)
- 【周练】 数学水题
- 1003 Hangover(数学水题)
- hdu 5170(数学水题)
- hdu 3349 (水,数学)
- AVI Player with Playmaker actions 视频转化格式之Duplicate frame remover(四)
- 柴俊理金:EIA库存大降止血,黄金沥青短线看涨
- 递归
- Spark MLlib 编程
- 关于设计CTA按钮的迷之思考
- hdu5666 (数学水题)
- 制作一个属于自己的CocoaPods文件!
- std::copy()和std::back_inserter()用法
- vue数据绑定
- rcInsDriver
- Socket 与 WebSocket
- 如何优化 Android Studio 启动、编译和运行速度?
- Zookeeper原理架构
- 如何使用本博客