All X
Accepts: 1281
Submissions: 7580
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
Problem Description
F(x,m) 代表一个全是由数字 x 组成的 m 位数字。请计算,以下式子是否成立: F(x,m) mod k ≡ c
Input
第一行一个整数 T ,表示 T 组数据。每组测试数据占一行,包含四个数字 x,m,k,c 1≤x≤9 1≤m≤1010 0≤c<k≤10,000
Output
对于每组数据,输出两行:第一行输出:"Case #i:"。 i 代表第 i 组测试数据。第二行输出“Yes” 或者 “No”,代表四个数字,是否能够满足题目中给的公式。
Sample Input
3
1 3 5 2
1 3 5 1
3 5 99 69
Sample Output
Case #1: No Case #2: Yes Case #3: YesHint对于第一组测试数据:111 mod 5 = 1,公式不成立,所以答案是”No”,而第二组测试数据中满足如上公式,所以答案是 “Yes”。AC代码://上面这代码虽然能A,但只是百毒之星的数据比较水。。#include<iostream> #include<cstdlib> #include<cstdio> #include<cmath> #include<cstring> #include<string> #include<cstdlib> #include<iomanip> #include<vector> #include<list> #include<map> #include<algorithm> typedef long long LL; using namespace std; const int maxn=1000000000; char a[maxn]; int main() { LL t,x,m,k,c; int flag=0; scanf("%lld",&t); while(t--) { LL num; scanf("%lld %lld %lld %lld",&x,&m,&k,&c); num=m%k; //关键点 LL ans=0; for(int i=1;i<=num;i++) { ans=(ans*10+x)%k; } // cout<<num<<endl; if(ans%k==c) printf("Case #%lld:\nYes\n",++flag); else printf("Case #%lld:\nNo\n",++flag); } return 0; }
//好心博主提醒了我,//1 5 5 1//输出的是No....(答案是Yes)//下面是用快速幂做的,测试过,应该没问题#include<iostream> #include<cstdlib> #include<cstdio> #include<cmath> #include<cstring> #include<string> #include<cstdlib> #include<iomanip> #include<vector> #include<list> #include<map> #include<queue> #include<algorithm> typedef long long LL; using namespace std; LL q_mod(LL a,LL b, LL c) { LL ans=1; a=a%c; while(b) { if(b&1) ans=(ans*a)%c; b>>=1; a=(a*a)%c; } return ans; } int main() { LL t,x,m,k,c,Ans; int flag=0; scanf("%lld",&t); while(t--) { scanf("%lld %lld %lld %lld",&x,&m,&k,&c); k=k*9; Ans=((q_mod(10,m,k)+k-1)%k)/9; k/=9; Ans=(Ans*x)%k; if(Ans==c) printf("Case #%lld:\nYes\n",++flag); else printf("Case #%lld:\nNo\n",++flag); } return 0; }