NOIP 2018.10.4
阿新 • • 發佈:2018-12-13
快速冪一位一位算就行了,開long long超時一個點??
#include<bits/stdc++.h> using namespace std; char a[100010]; int rest,now,K,t; int quick_pow(int a,int b,int mod){ int ret=1; while(b){ if(b&1) ret=ret*a%mod; a=a*a%mod; b>>=1; } return ret; } int main(){ /* freopen("kbased.in","r",stdin); freopen("kbased.out","w",stdout);*/ scanf("%d",&t); while(t--){ rest=0; scanf("%d",&K); scanf("%s",a); int len=strlen(a); for(int i=len-1;i>=0;--i){ if(a[i]>='0'&&a[i]<='9') now=a[i]-'0'; if(a[i]>='A'&&a[i]<='F') now=a[i]-'A'+10; rest=(rest+quick_pow(K,len-i-1,K-1)*now)%(K-1); } if(rest==0) printf("yes\n"); else printf("no\n"); } return 0; }
————————————————————————————————————————————————————————