K - A/B(逆元)

Description

要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。

Input

数据的第一行是一个T,表示有T组数据。

每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。

Output

对应每组数据输出(A/B)%9973。

Sample Input

2
1000 53
87 123456789

Sample Output

7922
6060

解题思路:

这道题应该用拓展欧几里德算法,总的思路是 (N = 9973):(A/B)%N = ( (A%N) * (1/B)%N)%N

因为 gcd(B,N) = 1,所以 = (n * (gcd(B,N)/B)%N)%

又因为根据拓展欧几里德算法可以得到一组x,y,使得gcd(B,N) = B*x + N*y,代入上式就可以得到

(n * (x + N*y/B)%N)%N= ((n%N) * (x + N*y/B)%N)%N= (n*(x+N*y/B))%N

因为y < B,所以y/B = 0所以原式G= (n*x)%N

又因为x可能为负,所以只要G = (G%N+N)%N,就可以化成正的了。

代码如下:

#include<stdio.h>
#include <iostream>
using namespace std;
int exgcd(int a,int b,int &x,int &y)
{
    int r;
    int t;
    if(b==0)
    {
        x=1;
        y=0;
        return a;
    }
    r=exgcd(b,a%b,x,y);
    t=x;
    x=y;
    y=t-a/b*y;
    return r;
}
int main()
{
    int T,n,b,x,y;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&b);
        exgcd(b,9973,x,y);
        x*=n;
        x=(x%9973+9973)%9973;
        printf("%d\n",x%9973);
    }
    return 0;
}

K - A/B(逆元)

时间: 2024-11-11 08:45:22

K - A/B(逆元)的相关文章

浅谈模质数意义下的乘法逆元

原文链接(更好的阅读体验) 参考文章www.luogu.org/blog/zyxxs/post-xiao-yi-jiang-tan-qian-tan-sheng-fa-ni-yuan 什么是乘法逆元 若整数\(b,m\)互质,并且\(b|a\),若存在一个整数\(x\),使得\(a / b \equiv a \ast x (mod \text{ } m)\),称\(x\)为 \(b\)的模\(m\)乘法逆元. 乘法逆元的用处 有时候,我们需要求\(a/b \text{ } mod \text{

逆元的求法

1.扩展欧几里得: void Exgcd(ll a, ll b, ll &x, ll &y) { if (!b) x = 1, y = 0; else Exgcd(b, a % b, y, x), y -= a / b * x; } int main() { ll x, y; Exgcd (a, p, x, y); x = (x % p + p) % p; printf ("%d\n", x); //x是a在mod p下的逆元 } 2.费马小定理+快速幂: ll fpm

组合数取模(转载)

本文转自:http://blog.csdn.net/skywalkert/article/details/52553048 0. 写在前面 在程序设计中,可能会碰到多种类型的计数问题,其中不少涉及到组合数的计算,所以笔者写下这么一篇文章,期望能解决一些常规的组合数求模问题.以下部分内容改编自AekdyCoin的<组合数求模>,而且为了感谢他对(懵懂的)笔者的启发,这篇文章的标题与其文章相同.另外,感谢Picks将多项式运算的技巧在中国进行推广,感谢51nod提供了许多有趣的数论题目,感谢fot

POJ 2417 Discrete Logging ( Baby step giant step )

Discrete Logging Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3696   Accepted: 1727 Description Given a prime P, 2 <= P < 231, an integer B, 2 <= B < P, and an integer N, 1 <= N < P, compute the discrete logarithm of N, b

【浮*光】#noip# 知识点总结

[零. 序言] ------头文件 #include<cstdio>    #include<iostream>    #include<cstring>    #include<string>    #include<algorithm>    #include<cmath>    #include<set>    #include<vector>    #include<map>    #inc

Codeforces round 1106

Div 2 536 题目链接 我还是太菜了.jpg E 傻逼DP直接做 我居然调了1.5h 我真的是太菜了.jpg 堆+扫描线直接维护每个位置的贪心结果 然后要么使用干扰 要么就接受贪心的结果 #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <cstdlib> #include <queue> #include &l

求解自然数幂和的若干种方法

问题的引入 给定\(n,k\)求\[\sum_{i=1}^ni^k\] 1. 循环 四年级应该会循环了. 能做到\(O(nk)\)的优秀时间复杂度. 2. 快速幂 五年级学了快速幂之后就能做到\(O(nlog_2k)\) 请不要小看这个算法.有时候在特定的情况下(例如\(n\)很小,或\(1\rightarrow n\)的距离变得很小时),这个复杂度真的很优秀. 3. 差分法 六年级应该知道差分和二项式定理了.那么:\[(a+1)^k-a^k=\sum_{i=0}^{k-1}C_k^ia^i\]

融合后如何如何后如何如何

http://ypk.39.net/search/all?k=%A6%C6%B6%F5%D6%DD%C4%C4%C0%EF%C2%F2%C3%C0%C9%B3%CD%AAQ%A3%BA%A3%B8%A3%B6%A3%B3%A3%B9%A3%B0%A3%B2%A3%B9%A3%B6%A3%B2%A1%C6 http://ypk.39.net/search/all?k=%A8z%BE%A3%C3%C5%C4%C4%C0%EF%C2%F2%C3%C0%C9%B3%CD%AAQ%A3%BA%A3%B8%

哥哥ukulele

http://ypk.39.net/search/all?k=%A1%FB%C6%CE%CC%EF%C4%C4%C0%EF%D3%D0%B0%B2%C0%D6%CB%C0%D2%A9%C2%F4Q%A3%BA%A3%B8%A3%B6%A3%B3%A3%B9%A3%B0%A3%B2%A3%B9%A3%B6%A3%B2%A1%BC http://ypk.39.net/search/all?k=%A1%D3%B8%A3%C7%E5%C4%C4%C0%EF%D3%D0%B0%B2%C0%D6%CB%C0