您的位置:首页 > 其它

Bestcoder 大数求余

2016-05-21 20:08 344 查看
                                                                                                    

                                     
  大数求余

 Time Limit: 2000/1000 MS (Java/Others)
 
 Memory Limit: 65536/65536 K (Java/Others)

Problem Description

F(x,
m)F(x,m) 代表一个全是由数字xx组成的mm位数
4000
字。请计算,以下式子是否成立:
F(x,m)\
mod\ k\ \equiv \ cF(x,m) mod k ≡ c

Input

第一行一个整数TT,表示TT组数据。
每组测试数据占一行,包含四个数字x,m,k,cx,m,k,c
1\leq
x\leq 91≤x≤9
1\leq
m\leq 10^{10}1≤m≤10​10​​
0\leq
c< k\leq 10,0000≤c<k≤10,000

Output

对于每组数据,输出两行: 第一行输出:"Case #i:"。ii代表第ii组测试数据。
第二行输出“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:
Yes


using namespace std;
int visit[11000];
int num[11000];
int main()
{
int t,sum = 1;
scanf("%d",&t);
while(t--)
{
int x,m,k,c;
scanf("%d%d%d%d",&x,&m,&k,&c);
memset(visit,0,sizeof(visit));
memset(num,0,sizeof(num));
int ans = 0,cas = 0;
while(1)
{

ans = ans * 10 + x;
ans = ans % k;

if(visit[ans] == 1) //找到循环点跳出
break;
else
visit[ans] = 1;
num[cas++] = ans;//记录余数,case代表周期个数

}
m = (m-1) % cas;//求余的时候要注意,余数只有(0~ cas-1 )
printf("Case #%d:\n",sum++);
if(num[m] == c)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: