hdu1576-A/B-(同余定理+乘法逆元+费马小定理+快速幂)

A/B

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10383    Accepted Submission(s):
8302

Problem 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

逆元概念:p是素数,在%p的情况下,如果 ( a*inv(a) ) ≡ 1 (%p),则inv(a)是a的乘法逆元

解题过程:

(A/B)%P
= (A%P) * (1/B)%P 同余定理,并且(A%P)=n,已知
= n * (1/B)%P

先不管n,

只看(1/B)%P

找B的逆元,按概念就是  (  B*inv(B) ) % P = 1%P = 1;

代入( 1/B )%P

=( B*inv(B)/B )%P

=inv(B) %P

费马小定理概念:如果p是素数,a和p互质,即gcd(a,p)=1,则 a^(p-1)≡1( %p )

逆元和费马小定理联立可得 a * a^(p-2) ≡ 1( %p ), inv(a) = a^(p-2)

代入inv(B) %P

=B^(P-2) %P

则原式 = n * B^(P-2) % P

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
const ll p=9973;

ll power(ll a,ll b)//快速幂
{
    ll res=1;
    while(b)
    {
        if(b%2==1)
            res=res*a%p;
        b=b/2;
        a=a*a%p;
    }
    return res%p;
}

int main()
{
    ll t,n,b;
    scanf("%lld",&t);
    while(t--)
    {
        scanf("%lld%lld",&n,&b);
        ll ans;
        ans=n*power(b,p-2)%p;
        printf("%lld\n",ans);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/shoulinniao/p/10358910.html

时间: 2024-08-11 21:16:45

hdu1576-A/B-(同余定理+乘法逆元+费马小定理+快速幂)的相关文章

BZOJ_[HNOI2008]_Cards_(置换+Burnside引理+乘法逆元+费马小定理+快速幂)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1004 共n个卡片,染成r,b,g三种颜色,每种颜色的个数有规定.给出一些置换,可以由置换得到的染色方案视为等价的,求等价类计数. 分析 给出置换求等价类计数,用Burnside引理:等价类计数=(每一个置换不动点的和)/置换数.(不知道的建议去看白书) 其中不动点是指一个染色方案经过置换以后染色与之前完全相同. 1.求不动点个数. 不动点的话同一个循环内的每一个点的颜色必须相同(否则不同颜色

CodeForces 300C Beautiful Numbers(乘法逆元/费马小定理+组合数公式+快速幂)

C. Beautiful Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Vitaly is a very weird man. He's got two favorite digits a and b. Vitaly calls a positive integer good, if the decimal

51nod A 魔法部落(逆元费马小定理)

A 魔法部落 小Biu所在的部落是一个魔法部落,部落中一共有n+1个人,小Biu是魔法部落中最菜的,所以他的魔力值为1,魔法部落中n个人的魔法值都不相同,第一个人的魔法值是小Biu的3倍,第二个人的魔法值是第一个人的3倍,以此类推. 现在小Biu想知道整个部落的魔法值和是多少?由于答案比较大,请把答案对1e9+7取模之后输出. 收起 输入 输入一个数N(0 <= N <= 10^9) 输出 输出:整个部落的魔法值和模1e9+7. 数据范围 对于20%的数据,n<=100: 对于40%的数

费马小定理&amp;欧拉定理

在p是素数的情况下,对任意整数x都有xp≡x(mod p).这个定理被称作费马小定理其中如果x无法被p整除,我们有xp-1≡1(mod p).利用这条性质,在p是素数的情况下,就很容易求出一个数的逆元.那上面的式子变形之后得到a-1≡ap-2(mod p),因此可以通过快速幂求出逆元. 我们先来证明一下费马小定理: 费马小定理证明: 一.准备知识 引理1:剩余系定理2 若a,b,c为任意3个整数,m为正整数,且(m,c)=1,则当ac≡bc(mod m)时,有a≡b(mod m) 证明:ac≡b

HDU - 1098 - Ignatius&#39;s puzzle (数论 - 费马小定理)

Ignatius's puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7012    Accepted Submission(s): 4847 Problem Description Ignatius is poor at math,he falls across a puzzle problem,so he has no

HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)

题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=4704 Problem Description Sample Input 2 Sample Output 2 Hint 1. For N = 2, S(1) = S(2) = 1. 2. The input file consists of multiple test cases. 题意是输入一个N,求N被分成1个数的结果+被分成2个数的结果+...+被分成N个数的结果,N很大 1.隔板原理 1~N有

HDOJ M斐波那契数列 4549【矩阵快速幂+快速幂+费马小定理+欧拉函数】

M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 2096    Accepted Submission(s): 596 Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给

[CodeVs1515]跳(lucas定理+费马小定理+乘法逆元)

嘿嘿嘿好久没写数学题了,偶尔看到一道写一写... 题目大意:一个(n+1)*(m+1)[0<=n, m<=10^12,n*m<=10^12]的矩阵,C(0,0)=1,C(x,y)=C(x-1,y)+C(x,y-1),求从0,0走到n,m路上最小权值(即为前面的C)和mod 10^9+7. 看到这个C(x,y)=C(x-1,y)+C(x,y-1),第一反应就是杨辉三角,所以这个矩阵其实就是一个由组合数组成的矩阵,第i行第j列的权值为C(i+j,j)[注意这个矩形起点是(0,0)]. 我们可

【日常学习】乘法逆元&amp;&amp;欧拉定理&amp;&amp;费马小定理&amp;&amp;欧拉函数应用&amp;&amp;常大学霸

转载请注明出处 [ametake版权所有]http://blog.csdn.net/ametake欢迎来看看 今天花了一个多小时终于把乘法逆元捣鼓明白了 鉴于我拙计的智商抓紧把这些记录下来 在此本栏目鸣谢里奥姑娘和热心网友himdd的帮助和支持 那么正文开始··· 逆元是干什么的呢? 因为(a/b)mod p ≠(a mod p)/(b mod p) 我们需要想一种方法避免高精 那就是把除法转化为乘法 因为(a*b) mod p = ( a mod p ) *( b mod p ) 怎么转化呢?