uva 10710 快速幂取模

//题目大意:输入一个n值问洗牌n-1次后是不是会变成初始状态(Jimmy-number),从案例可看出牌1的位置变化为2^i%n,所以最终判断2^(n-1)=1(mod n)是否成立
#include<iostream> #include<cstring> #include<cmath> #include<cstdio> using namespace std; long long Montgomery(long long a,long long b,long long c) { long long t=1; while(b) { if(b%2) t=t*a%c; b/=2; a=a*a%c; } return t; } int main() { long long n,d; while(cin>>n && n!=-1) { d=Montgomery(2,n-1,n); if(d==1) printf("%lld is a Jimmy-number ",n); else printf("%lld is not a Jimmy-number ",n); } return 0; }
原文地址:https://www.cnblogs.com/xiong-/p/3224075.html