参考博客:
HDU 6189 Law of Commutation(数论)
Happy Equation ZOJ - 4123 (数论)
【题意】:
给一个式子,求符合x的个数:
然后这个题目可以通过奇偶数找规律得出答案。
这个规律也挺不好弄的。
首先:
a 为 奇数时: 为奇数
b有两种情况
1、b 为偶数时: 明显是一个偶数(不符合)
2、b 为奇数时:不存在,除了本身。
a为 偶数时:为偶数
b有两种情况
1、b 为奇数时:(不符合)
2、b 为偶数时:
用t来表示a:a = 2 * t
当x>=p时:mod后为0
当x
从右边开始看:
当ax>=p时:
mod后为0时:
x>=ceil(p/a)
∴在第一种和第二种情况分析下:
取最大范围的 [ ceil( p / a ) , 2^p ]
然后记得,如果这个范围中包含了,我们第一种情况中的暴力求解,要剔除
#include
using namespace std;
typedef long long ll;
ll qpow(ll a,ll b,ll mod,ll ans=1){
ll Ans = ans;
a%=mod;
while(b){
if(b&1){
Ans = Ans * a % mod;
}
a = a * a % mod;
b >>= 1;
}
return Ans;
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
ll a,p;
scanf("%lld%lld",&a,&p);
if( a & 1 ) { puts("1"); continue;}
ll P = (1ll<>x);
printf("%lld\n",Ans);
}
return 0;
}