HDU 5666 Segment 数论+大数
题目链接:
hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5666
bc(中文):http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=688&pid=1002
题解:
首先可以统计出三角形内所有的点数,(q-2)+(q-3)+...+1=(q-1)*(q-2)/2
其次只要减去被线段割到的点,对于线段xi+yi=q,割到的点有gcd(xi,yi)-1=gcd(xi,q-xi)-1=gcd(xi,q)-1;由于q为质数,所以没有没被割到的点。
综上所述,答案为(q-1)*(q-2)/2;
由于(q-1)*(q-2)超过long long 的范围,所以不能直接求解。
以下提供两种解题方案。
1、用java求大数:
1 import java.util.*; 2 import java.math.*; 3 public class Main { 4 public static void main(String args[]){ 5 Scanner cin = new Scanner(System.in); 6 long q,P; 7 int tc=cin.nextInt(); 8 9 while((tc--)>0){ 10 q=cin.nextLong(); 11 P=cin.nextLong(); 12 BigInteger q1=new BigInteger(Long.toString(q-1)); 13 BigInteger q2=new BigInteger(Long.toString(q-2)); 14 BigInteger ans=q1.multiply(q2); 15 ans=ans.divide(BigInteger.valueOf(2)); 16 ans=ans.remainder(new BigInteger(Long.toString(P))); 17 System.out.println(ans.toString()); 18 } 19 } 20 }
2、模拟笔算二进制乘法
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<vector> 5 using namespace std; 6 7 const int maxn=1e5+10; 8 typedef long long LL; 9 10 const LL ONE=1; 11 LL mul(LL a,LL b,LL p){ 12 LL ret=0; 13 for(;b>0;b>>=1){ 14 if(b&1){ 15 ret+=a; 16 ret%=p; 17 } 18 a=(a+a)%p; 19 } 20 return ret; 21 } 22 23 int main() { 24 int tc; 25 scanf("%d",&tc); 26 while(tc--) { 27 LL q,p; 28 scanf("%lld%lld",&q,&p); 29 LL q1=q-1,q2=q-2; 30 if(q1&1) q2/=2; 31 else q1/=2; 32 LL ans=mul(q1,q2,p); 33 printf("%lld\n",ans); 34 } 35 return 0; 36 }
转载于:https://www.cnblogs.com/fenice/p/5402696.html
HDU 5666 Segment 数论+大数相关推荐
- hdu 5568(dp+大数模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5568 官方题解: #include <cstdio> #include <cstri ...
- hdu 1042 N!(大数)
题意:求n!(0 ≤ N ≤ 10000) 思路:大数,用数组存储 1.首先要考虑数据N!的位数,因为最大是10000!,可以计算一下大概是5+9000*4+900*3+90*2+10*1=38865 ...
- hdu 1134 卡特兰数(大数模板)
卡特兰数 递推公式: C(n)=C(2n,n)/(n+1) 即用数组表示为c[i]=c[i-1]*(4*i-2)/(i+1); 一般形式 直接 表达 c[1]=1; for(i=2;i<40; ...
- hdu 4279Number(数论)
传送门 参考资料: [1]:https://www.2cto.com/kf/201308/233613.html 题意,题解在上述参考资料中已经介绍的非常详细了,接下来的内容只是记录一下我的理解: 我 ...
- HDU 1002 A+BII大数
此题杀死各种新手,当年被此题卡住两个星期辗转难眠,最终发现拿数组存下每位数然后模仿笔算即可,附渣代码: #include <stdio.h> #include <string.h&g ...
- HDU 1495 非常可乐(数论,BFS)
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- hdu 多校数论 GuGuFishtion
容斥+gcd+欧拉函数 求出1-n 和 1-m所有gcd(i,j)==x对数 x的范围1-min(n,m) 分解x的质因子 (1-1/p)... q[x]=(1-1/p1)*(1-1/p2)/... ...
- hdu 4196(数论)
题意:问小于n的数的乘积能拼成的最大平方数是多少? 思路:给n!做质数分解在除去指数为奇数的那些质数,由于题目中需要模运算所以不能直接除,必须乘上摸逆. 代码如下: 1 /************** ...
- HDU 1695(数论,筛选+素因子分解+容斥)
题意:已知给定k,x,y求 1<=a<=x 1<=b<=y 中满足 gcd(a,b)=k 的(a,b)对数.(注意数对是无序的). 1<=x,y<=1e5, 0&l ...
最新文章
- 为什么要在JavaScript中使用静态类型? (使用Flow进行静态打字的4部分入门)
- 每日一皮:最真实的现代互联网商业模式
- 关于angular2更新时机的一些发现
- c#(6)——数组的应用和二维数组
- 用vue实现简单实时汇率计算功能
- Oracle date日期类型使用
- 如何克服presentation恐惧呢?
- (四)BP神经网络预测(上)
- 多目标跟踪 综述(三)
- php 爬虫框架QueryList
- python编解码的字节与字符串相互转换
- TMS320F28335的特点
- WordPress使用邮箱服务功能
- 新浪微博技术架构分析
- bzoj2555 SubString (SAM+LCT维护子树大小/ETT)
- [深度学习之CNN]CNN卷积神经网络LeNet-5
- 直观理解Dilated Convolution
- 通过 TokenType(){}.getType()获取Persionlt;Tgt; 泛型T的类型和数值
- OpenGL画三角形
- 信号链(Signal Chain)芯片
热门文章
- 【java】窗口和流的应用
- springboot文件上传和下载工具_SpringBoot图文教程7—SpringBoot拦截器的使用姿势这都有...
- PyTorch 模型训练实用教程(附代码)
- 随机森林的原理及Python代码实现
- php执行查询的代码,PHP实现动态执行代码的方法
- leetcode两数之和,三数之和,四数之和问题
- 创新方法(TRIZ)理论及应用(一)
- Ruby设计模式透析之 —— 适配器(Adapter)
- Android服务查询完整过程源码分析
- Eclipse用法和技巧十八:减少不必要的输入