Segment

Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

Problem Description
    Silen August does not like to talk with others.She like to find some interesting problems.
    Today she finds an interesting problem.She finds a segment x+y=q.The segment intersect the axis and produce a delta.She links some line between (0,0)and the node on the segment whose coordinate are integers.
    Please calculate how many nodes are in the delta and not on the segments,output answer mod P.
 
Input
    First line has a number,T,means testcase number.
    Then,each line has two integers q,P.
    q is a prime number,and 2≤q≤1018,1≤P≤1018,1≤T≤10.
 
Output
    Output 1 number to each testcase,answer mod P.
 
Sample Input
1
2 107
 
Sample Output
0
 

题解:给一个线段,让求线段与坐标轴之间空白部分的整数点的个数,很容易找到规律;

(q - 1)(q - 2) /  2;

由于q是1e18,P也是1e18,相乘会超ll,所以想到用巧妙的方法把相乘换成相加;思路:把一个数化为二进制,例如3 * 5 =  1(二进制) * 5 + 10(二进制) * 5;具体看代码:

代码:

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cmath>
  4. #include<algorithm>
  5. using namespace std;
  6. const int INF = 0x3f3f3f3f;
  7. typedef long long LL;
  8. LL js(LL x, LL y, LL MOD){
  9. LL ans = ;
  10. while(x){
  11. if(x&){
  12. ans += y;
  13. ans %= MOD;
  14. }
  15. x >>= ;
  16. y <<= ;
  17. y %= MOD;
  18. }
  19. return ans;
  20. }
  21. int main(){
  22. LL P, q;
  23. int T;
  24. scanf("%d", &T);
  25. while(T--){
  26. scanf("%lld%lld", &q, &P);
  27. if((q - ) & ){
  28. printf("%lld\n", js(q - , (q - ) / , P));
  29. }
  30. else if((q - ) & ){
  31. printf("%lld\n", js(q - , (q - ) / , P));
  32. }
  33. }
  34. return ;
  35. }

java:由于没有相等,packpage没有删除,错了半天。。。。。

  1. //package 随笔;
  2.  
  3. import java.math.BigInteger;
  4. import java.util.*;
  5. //(q - 1)(q - 2) / 2;
  6. public class Main {
  7. public static void main(String[] s){
  8. int T;
  9. Scanner input = new Scanner(System.in);
  10. T = input.nextInt();
  11. BigInteger x = new BigInteger("-1");
  12. BigInteger y = new BigInteger("-2");
  13. while(T-- > ){
  14. BigInteger q = input.nextBigInteger(), p = input.nextBigInteger();
  15. BigInteger q1, q2;
  16. //q = q.add(BigInteger.valueOf(1));
  17. q1 = q.add(x);
  18. q2 = q.add(y);
  19.  
  20. //System.out.println(q1 + "**" + q2);
  21. q1 = q1.multiply(q2);
  22. q1 = q1.divide(y.negate());
  23. q1 = q1.mod(p);
  24. System.out.println(q1);
  25. }
  26. }
  27. }

Segment(技巧 相乘转换成相加 + java)的更多相关文章

  1. Java-Runoob-高级教程-实例-时间处理:04. Java 实例 - 时间戳转换成时间

    ylbtech-Java-Runoob-高级教程-实例-时间处理:04. Java 实例 - 时间戳转换成时间 1.返回顶部 1. Java 实例 - 时间戳转换成时间  Java 实例 以下实例演示 ...

  2. JAVA将数字字符串强制转换成整型变量----求参数之和实验代码(附流程图)

    一.设计思想 先将参数个数输出,并利用循环结果将参数逐个输出,再将字符串强制转化成整型,利用循环结构相加求和 二.程序流程图 三.源程序代码 package demo; public class Co ...

  3. 将一个字符串中的大写字母转换成小写字母,小写字母转换成大写字母(java)

    背景:刚刚学到java的String和StringBuffer类,遇到如标题所示的题. 要求:必须要用到String类的toUpperCase方法和toLowerCase方法 思路:用到StringB ...

  4. Java Keytools 证书转换成Openssl 的PEM 文件或keytools 导出私钥文件

    上一遍又说到Godaddy 生请证书流程与操作: 现因使用Incapsula 防护使用到https,在添加网站时需要自定义证书,其中需要上传私钥信息,因公钥是能过keytool 生成所以需要导出私钥信 ...

  5. Java 把 InputStream 转换成 String 的几种方法

    我们在 Java 中经常会碰到如何把 InputStream 转换成 String 的情形,比如从文件或网络得到一个 InputStream,需要转换成字符串输出或赋给别的变量. 未真正关注这个问题之 ...

  6. java时间类型的转换/获取当前时间/将时间转换成String/将String转换成时间

    对于我的脑子,我已经服气了...写了N遍的东西,就是记不住...既然记不住那就记下来... 利用java获取当前的时间(String类型,年-月-日 时:分:秒) //我要获取当前的日期 Date d ...

  7. 将整数转换成二进制的java小程序

    首先我们知道,将整数转换成二进制是将整数除二取余将最后除得的数和得到的余数从下向上写,组成得到的二进制数. java程序实现如下: public class ChangeToErjinzhi { pu ...

  8. 如何把IP转换成经纬度(Java版)

    经常有这种需求,拥有用户的IP地址,想要在地图上显示用户的访问量.这个时候就需要用到经纬度...应为一般的地图插件都是基于经纬度的. 那么问题来了,如何把IP转换成经纬度? 百度API 最国产的方式, ...

  9. Java中Office(word/ppt/excel)转换成HTML实现

    运行条件:JDK + jacob.jar + jacob.dll 1) 把jacob.dll在 JAVA_HOME\bin\ 和 JAVA_HOME\jre\bin\ 以及C:\WINDOWS\sys ...

随机推荐

  1. html5的a标签使用

    主要是href和target两个属性 示比例如以下: <a href="" target="_blank">Visit w3school</a ...

  2. 学习AJAX(一)

  3. 第二章 Android Studio使用第三方模拟器

    1.为什么要使用第三方模拟器 Android Studio自带模拟器,相对Eclipse来说项目启动速度的确快了很多倍,提高了开发效率.但和第三方模拟器进行对比的话,还是第三方的模拟器运行速度更快些. ...

  4. SQL Server -SET ANSI_NULLS

    当ANSI_NULLS 为ON时,遵循SQL92的标准,只能使用IS NULL 来判断值是否为NULL, 而不能使用=或<>来与NULL做比较,任何值包括NULL值与NULL值做=或< ...

  5. PHP学习笔记三十【final】

    <?php //final不能去修饰属性(变量) //如果希望类不希望被继承就可以使用final关键字 final class Person() { public function sayHi( ...

  6. 1218.1——OC中的常见关键字及一些基本方法

    OC常见的关键字介绍: @ 看到这个关键字,我们就应该想到,这是Object-C对C语言的扩展,例如@interface XXX. @interface 声明类 @implementation 实现类 ...

  7. [转载]一个小例子介绍Obj-C的函数命名方式

    原文链接:http://www.cnblogs.com/liufan9/archive/2013/04/02/2995626.html 对于以前做C#或者JAVA开发的朋友而言,初次接触iOS开发,O ...

  8. 漂亮回答面试官struts2的原理

    众所周知,Struts2是个非常优秀的开源框架,我们能用Struts2框架进行开发,同时能快速搭建好一个Struts2框架,但我们是否能把Struts2框架的工作原理用语言表达清楚,你表达的原理不需要 ...

  9. (原+转)pycharm中使用caffe

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5896446.html 参考网址: http://www.th7.cn/Program/Python/2 ...

  10. Android中对手机文件进行读写

    参考张泽华视频 (一)读写手机内存卡中的文件 对手机中的文件进行读写操作,或者新增一个文件时,可直接使用openFileOutput  /  openFileInput 得到文件的输出.输入流. Fi ...