hdu1576 A/B (扩展欧几里德)
来源:互联网 发布:dm800台标编辑软件 编辑:程序博客网 时间:2024/06/05 12:47
http://acm.hdu.edu.cn/showproblem.php?pid=1576
A/B
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)。
每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。
Output
对应每组数据输出(A/B)%9973。
Sample Input
21000 5387 123456789
Sample Output
79226060
由B|A得A=B*x,又A%M=n有A=M*y+n=B*x,则存在B*x+M*y=n;由gcd(B,M)==1则存在B*_x+M*_y=1; 则x=_x*n;x可能为负数,ans=(x%mod+mod)%mod;
#include<stdio.h>#include<iostream>using namespace std;const int mod=9973;void extendgcd(int a,int b,int &x,int &y){ if(b==0) { x=1;y=0; return ; } else { extendgcd(b,a%b,x,y); int tmp=x; x=y; y=tmp-a/b*y; }}int main(){ int t,n,b,x,y; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&b); extendgcd(b,mod,x,y); x*=n; x=(x%mod+mod)%mod; printf("%d\n",x); } return 0;}方法二:
设A/B%M=ans;则A/B=ans+M*x --> A=(ans+M*x)*B --> M*y+n= ans*B + M*x*B (下一步同模M)--> n=(ans*B)%M --> n=( ans*( B%M) )%M;而 ans的范围是[0,9973);枚举ans即可;
#include "stdio.h"int main(){ int t,n,b,c; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&b); b=b%9973; for (c=0;c<9973;c++) { if (n==(b*c)%9973) { printf("%d\n",c); break; } } }}
- hdu1576 A/B (扩展欧几里德)
- Hdu1576 A-A/B 扩展欧几里德
- HDU1576 A/B 扩展欧几里德简单题
- hdu1576 A/B(扩展的欧几里德算法)
- hdu1576 A/B 扩展欧几里德算法
- HDU1576 A/B 扩展欧几里得
- HDU1576 A/B(扩展欧几里得)
- [hdu1576]: A/b (扩展欧几里得)
- hdu1576 A/B 扩展欧几里得求逆元
- hdu1576(A/B)扩展欧几里得
- HDU1576 A/B (扩展欧几里得求逆元)
- hdu1576-A/B
- hdu1576 A/B
- hdu1576 A/B
- hdu1576- A/B
- HDU1576 A/B
- #HDU1576# A/B
- A/B HDU1576
- 块设备驱动程序
- Hash Table
- 向info.plist文件中写入数据(nsdictionary)
- VC编程中20种各种编程技巧和方法
- 算法:选择排序算法。
- hdu1576 A/B (扩展欧几里德)
- sublime各种配置
- 我们应该怎样做好博客的SEO优化排名
- C获取自身进程名称
- 与IO相关的等待事件troubleshooting-系列1
- 【技术文档】《编程珠玑》Jon Bentley·第9章 代码调优
- 从wordpress博客链接管理被删 看SEO未来趋势
- JAVA(UI)笔记
- ZOJ 3022 数学题