hdu 5690 바 이 두 의 별 All X (행렬 쾌속 멱)
1972 단어 HDU
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
Output
각 그룹의 데이터 에 대해 두 줄 을 출력 합 니 다:
첫 번 째 줄 출력: "Case \ # i:".
대표
i 조 테스트 데이터.
두 번 째 줄 은 'Yes' 나' No '를 출력 하고 네 개의 숫자 를 대표 하 며 제목 에서 준 공식 을 만족 시 킬 수 있 습 니까?
/*
10 10 , , m k
f=f*10+k
[k,1]* [10 0] m-1
[x 1]
*/
#include <cstdio>
#include <iostream>
using namespace std;
typedef __int64 ll;
ll m;
int k,mod,c;
struct matrix
{
int m[2][2];
}ans, base;
matrix multi(matrix a, matrix b)
{
matrix tmp;
for(int i = 0; i < 2; ++i)
{
for(int j = 0; j < 2; ++j)
{
tmp.m[i][j] = 0;
for(int k = 0; k < 2; ++k)
tmp.m[i][j] = (tmp.m[i][j] + a.m[i][k] * b.m[k][j]) % mod;
}
}
return tmp;
}
int fast_mod(ll n) // base n
{
base.m[0][0] = 10;
base.m[0][1] = 0;
base.m[1][0] = k;
base.m[1][1] = 1;
ans.m[0][0] = ans.m[1][1] = 1; // ans
ans.m[0][1] = ans.m[1][0] = 0;
while(n)
{
if(n & 1) // ans *= t; ans tmp, ans = tmp * t
{
ans = multi(ans, base);
}
base = multi(base, base);
n >>= 1;
}
return ans.m[0][0]*k+ans.m[1][0];
}
int main()
{
int t,cas=1;
scanf("%d",&t);
while(t--)
{
printf("Case #%d:
",cas);
cas++;
scanf("%d%I64d%d%d",&k,&m,&mod,&c);
ll ans=(fast_mod(m-1)+mod)%mod;
if(ans==c)
printf("Yes
");
else
printf("No
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[HDU] 4089 활성화 확률 DPdp[i][j]를 모두 i개인의 대기열인 Tomato가 j위 서버가 마비될 확률로 역추를 사용하면 우리는 상태 이동 방정식을 얻을 수 있다. i == 1 : dp[1][1] = dp[1][1] * p1 + dp[1]...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.