您的位置:首页 > 其它

ZOJ 3609 Modular Inverse

2014-03-08 20:15 337 查看
点我看题目

题意 : 这个题是求逆元的,怎么说呢,题目看着很别扭。。。。就是给你a和m,让你求一个最小的x满足
a-1≡x (mod m)
.或者
ax≡1 (mod m)
.通俗点说呢,就是找一个最小的x,他满足的条件的是a*x取余m等于1.

思路 :这个题反正数据不是很大,枚举就行了,因为维基百科中说的,两个数必须是互质的,所以判断一下,还有这个题特别逗的是m是1的时候x肯定也是1,我觉得任何一个数取余1都应该是0,可是这里显然不是这样的。这个题还可以用扩展的欧几里德算法,也可以做。

#include <stdio.h>
#include <math.h>
#include <iostream>
#include <string.h>

using namespace std ;

int gcd(int a,int b)
{
return (b>0)?gcd(b,a%b):a;
}
int main()
{
int T ;
scanf("%d",&T);
while(T--)
{
int a,m ;
scanf("%d %d",&a,&m) ;
if(gcd(a,m) != 1)
{
printf("Not Exist\n") ;
continue ;
}
int flag ;
for(int i = 1 ; i <= m ; i++)
{
if((a*i-1)%m == 0)//这里是因为当m为1的时候如果直接用(a*i)%m==1的话有误了。
{
flag = i ;
break;
}
}
printf("%d\n",flag) ;
}
return 0 ;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: