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;具体看代码:

代码:

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
typedef long long LL;
LL js(LL x, LL y, LL MOD){
LL ans = ;
while(x){
if(x&){
ans += y;
ans %= MOD;
}
x >>= ;
y <<= ;
y %= MOD;
}
return ans;
}
int main(){
LL P, q;
int T;
scanf("%d", &T);
while(T--){
scanf("%lld%lld", &q, &P);
if((q - ) & ){
printf("%lld\n", js(q - , (q - ) / , P));
}
else if((q - ) & ){
printf("%lld\n", js(q - , (q - ) / , P));
}
}
return ;
}

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

//package 随笔;

import java.math.BigInteger;
import java.util.*;
//(q - 1)(q - 2) / 2;
public class Main {
public static void main(String[] s){
int T;
Scanner input = new Scanner(System.in);
T = input.nextInt();
BigInteger x = new BigInteger("-1");
BigInteger y = new BigInteger("-2");
while(T-- > ){
BigInteger q = input.nextBigInteger(), p = input.nextBigInteger();
BigInteger q1, q2;
//q = q.add(BigInteger.valueOf(1));
q1 = q.add(x);
q2 = q.add(y); //System.out.println(q1 + "**" + q2);
q1 = q1.multiply(q2);
q1 = q1.divide(y.negate());
q1 = q1.mod(p);
System.out.println(q1);
}
}
}

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. C#开发客户端、JAVA和tomcat开发服务端

    hessian入门,Hello和文件上传范例,C#客户端+Java Tomcat后台 2.Hello范例1)后台--定义Java接口:package org.migle.hessian; public ...

  2. python标准库 bisect模块

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #bisect #作用:维护有序列表,而不必在每次向列表增加一个元素 ...

  3. handsontable的核心方法

    1.为handsontable添加钩子方法 addHook(key,callback):key为钩子方法名 <span style="font-size:18px;"> ...

  4. IOS 创建一张有颜色的UIImage

    #import <UIKit/UIKit.h> @interface UIImage (ImageWithColor) + (UIImage *)imageWithColor:(UICol ...

  5. android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法

    最近项目开发中用到了android:launchMode="singleTask" 和 onNewIntent(Intent intent)两个特性,现总结一下经验: androi ...

  6. Android.mk具体解释

    概述     Android.mk文件用来向编译系统描写叙述怎样编译你的源码.更确切地说,该文件事实上就是一个小型的Makefile.由于该文件会被NDK的编译工具解析多次,因此应该尽量降低源码中声明 ...

  7. Servlet实现Session

    (1)首先看一下项目的结构 是在tomcat--webaps下的myWebSites项目 在myWebSites下有仅仅有WEB-INF目录 在WEB-INF目录中有  一下目录(在classes目录 ...

  8. Oracle:grouping和rollup

    Oracle grouping和rollup简单测试 SQL,,,) group by department_id order by department_id; DEPARTMENT_ID SUM( ...

  9. Microsoft Visual C++ 不支持long long

    Microsoft Visual C++ 不支持long long 在C/C++中,64为整型一直是一种没有确定规范的数据类型.现今主流的编译器中,对64为整型的支持也是标准不一,形态各异.一般来说, ...

  10. Dreamwaver 使用root用户连接不上远程服务器

    我用dreamweaver连接远程服务,开始用的是root用户登录的,但是连接不上.网上查了一下,解决教程非常复杂,我就不列出来了. 后来我想了一下,之前我有连接过.我感觉可能是用户的问题,于是我在远 ...