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
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
int a[100000],b[100000];
int main()
{
int t;
cin>>t;
for(int i=1;i<=t;i++)
{
memset(a,-1,sizeof(a)),memset(b,-1,sizeof(b));
long long x,m,k,c,ans;
cin>>x>>m>>k>>c;
ans=0;
int sec=-1,fir=-1,d;
for(int j=1;j<=m;j++)
{
ans=ans*10+x;
ans%=k;
if(a[ans]==-1)
{
b[j]=ans;
a[ans]=j;
}
else
{
sec=j,fir=a[ans];
d=sec-fir;
break;
}
}
if(sec!=-1)
m=(m-fir)%d+fir; // 在循环中的位置
int f=b[m];
cout<<"Case #"<<i<<":"<<endl;
if(f==c)
cout<<"Yes\n";
else
cout<<"No\n";
}
return 0;
}
本文介绍了一种通过模运算来判断特定数学表达式是否成立的方法。对于形如F(x,m)modk≡c的表达式,其中F(x,m)是由数字x组成的m位数,文章提供了一个高效的算法来验证该等式是否正确。通过对输入数据进行处理,并利用循环结构来减少计算复杂度。
1万+

被折叠的 条评论
为什么被折叠?



