题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1352

题意:中文题诶~

思路:exgcd

显然题目可以描述为:求a*x+b*y=n+1中满足  1 <= x,y <=n 的解数,

可以先通过exgcd求出一组a*x+b*y=gcd(a, b)的解 x1, y1,那么对应的a*x+b*y=n+1的解就是x1*(n/gcd(a, b)), y1*(n/(gcd(a, b)),

若能求出最小的x解的话,则每隔lcm(a, b), 隔lcm(a, b)出现一组满足条件的解,所以有ans=(n-1-x*a)/lcm(a,b) + 1;

先令x=x1%b,要尽量使x小,所以将大于b的部分放到b*y中去;

令temp=x*a, cc=lcm(a, b)

则有:

  while(temp<1){
            temp+=cc;
        }
        while(temp>0){
            temp-=cc;
        }
        temp+=cc;// 第一个大于0的a*x

将其直接化为公式计算:

  if(temp<1){
            k=ceil(double(1-temp)/cc);
            temp+=cc*k;
        }else{
            k=(temp-1)/cc;
            temp-=cc*k;
        }

答案也就显而易见了,注意中间可能会爆int....

代码:

 #include <iostream>
#include <stdio.h>
#include <math.h>
#define ll long long
using namespace std; int exgcd(ll a, ll b, ll& d, ll& x, ll& y){
if(b==){
x=, y=, d=a;
}else{
exgcd(b, a%b, d, y, x);
y-=(a/b)*x;
}
} int main(void){
int t;
ll n, a, b;
scanf("%d", &t);
while(t--){
scanf("%lld%lld%lld", &n, &a, &b);
ll x, y, d;
exgcd(a, b, d, x, y);
if((++n)%d){ //a*x+b*y=c 当且仅当c=k*gcd(a,b)时有整数解
printf("0\n");
continue;
}
x=x*(n/d)%b; //得到a*x+b*y=n+1的解,若x>b,将大于b的部分放到y*b中
ll cc=a*b/d; //lcm(a,b)
ll temp=x*a;
// while(temp<1){
// temp+=cc;
// }
// while(temp>0){
// temp-=cc;
// }
// temp+=cc;// 第一个大于0的a*x
ll k;
if(temp<){
k=ceil(double(-temp)/cc);
temp+=cc*k;
}else{
k=(temp-)/cc;
temp-=cc*k;
}
if(temp>=n){
printf("0\n");
}else{
printf("%lld\n", (n-temp-)/cc+);//前面给n加了1,但求出的b*y要<=n
}
}
return ;
}

51nod1352(exgcd)的更多相关文章

  1. 扩展欧几里得 exGCD

    Elementary Number Theory - Extended Euclid Algorithm Time Limit : 1 sec, Memory Limit : 65536 KB Jap ...

  2. NOIP2012同余方程[exgcd]

    题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开 输出格式: 输出只有一行,包含一个正整 ...

  3. exgcd,求乘法逆元

    procedure exgcd(a,b:int64); var t:longint; begin then begin x:=;y:=; exit; end else exgcd(b,a mod b) ...

  4. 【板子】gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数

    1.gcd int gcd(int a,int b){ return b?gcd(b,a%b):a; } 2.扩展gcd )extend great common divisor ll exgcd(l ...

  5. 【BZOJ-4522】密钥破解 数论 + 模拟 ( Pollard_Rho分解 + Exgcd求逆元 + 快速幂 + 快速乘)

    4522: [Cqoi2016]密钥破解 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 290  Solved: 148[Submit][Status ...

  6. poj1061 Exgcd

    #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> usin ...

  7. 51Nod 1256 乘法逆元 Label:exgcd

    1256 乘法逆元 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K ...

  8. 【BZOJ2242】【SDoi2011】计算器 快速幂+EXGCD+BSGS

    Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...

  9. Poj 2115 C Looooops(exgcd变式)

    C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22704 Accepted: 6251 Descripti ...

随机推荐

  1. EasyDarwin开源流媒体服务器提供的TS切片/HLS直播打包库

    EasyHLS  Github:https://github.com/EasyDarwin/EasyHLS EasyHLS是什么? EasyHLS是EasyDarwin开源流媒体社区开发的一款HLS打 ...

  2. what??|诞生才一年的BCH竟面临硬分叉的抉择

    BCH才刚过一周岁生日一个星期,BCH社区的主力之一Bitcoin ABC(BCH全网接近三分之二节点运行的软件系统由Bitcoin ABC开发)就搅动了社区的涟漪.8月8号,Bitcoin ABC公 ...

  3. animation steps属性实现帧动画

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta na ...

  4. HDU4549 M斐波那契数列 —— 斐波那契、费马小定理、矩阵快速幂

    题目链接:https://vjudge.net/problem/HDU-4549 M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Li ...

  5. 2016 Al-Baath University Training Camp Contest-1 I. March Rain —— 二分

    题目链接:http://codeforces.com/problemset/gymProblem/101028/I I. March Rain time limit per test 2 second ...

  6. MySQL学习笔记(二)——检索数据与过滤数据

    检索数据和过滤数据也就是平时用到最多的增删改查里面的查了. 一.数据检索 检索单个列: select column from table; 检索多个列:     select colunm1,colu ...

  7. android BLE Peripheral 手机模拟设备发出BLE广播 BluetoothLeAdvertiser

    android 从4.3系统开始可以连接BLE设备,这个大家都知道了.iOS是从7.0版本开始支持BLE. android 进入5.0时代时,开放了一个新功能,手机可以模拟设备发出BLE广播, 这个新 ...

  8. PGTM通用性能测试模型

    PTGM通用性能测试模型 一.      测试前期准备阶段 目标: 1. 保证系统稳定性: 2. 建立合适的测试团队. 活动: 1.    系统基础功能验证 类似于BVT测试,确保被测系统已具备进行性 ...

  9. Mac开发快速入门

    初次接触mac开发,发现国内相关资料少得可怜,于是写下这篇文章,作为学习记录.Mac应用开发也是使用Objective-C进行开发的,所以从iOS转Mac并不困难,很多东西都一样. 本文以一个登录界面 ...

  10. ZIP伪加密(deprecated)

    ZIP伪加密 经过伪加密的apk,改成zip格式打开会发现里面的文件都经过了加密. APK实际上是Zip压缩文件,但是Android系统在解析APK文件时,和传统的解压压缩软件在解析Zip文件时存在差 ...