結果

問題 No.1842 Decimal Point
ユーザー highlighterhighlighter
提出日時 2023-10-15 20:45:32
言語 C++23
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 1,561 bytes
コンパイル時間 4,644 ms
コンパイル使用メモリ 247,260 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-09-16 22:06:56
合計ジャッジ時間 6,588 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;
#define int long long

int mod1=1073741824;
int mod2=1220703125;

int power(int a,int b,int mod){
	if(mod==-1){
		vector<int> data(62);
		data[0]=a;
		for(int i=1;i<62;i++){
			data[i]=data[i-1]*data[i-1];
		}
		bitset<62> x(b);
		int ans=1;
		for(int i=0;i<62;i++){
			if(x[i]==1){
				ans*=data[i];
			}
		}
		return ans;
	}
	vector<int> data(62);
	data[0]=a%mod;
	for(int i=1;i<62;i++){
		data[i]=data[i-1]*data[i-1]%mod;
	}
	bitset<62> x(b);
	int ans=1;
	for(int i=0;i<62;i++){
		if(x[i]==1){
			ans*=data[i];
			ans%=mod;
		}
	}
	return ans;
}

int inverse(int a,int m) {
    int b = m, u = 1, v = 0;
    while (b) {
        int t = a / b;
        a-=t*b; swap(a, b);
        u-=t*v; swap(u, v);
    }
    u%=m; 
    if (u < 0) u += m;
    return u;
}
signed main() {
	int T;
	cin >> T;
	for(;T--;){
		int A,B,C;
		cin >> A >> B >> C;
		int bunshi1=A%mod1*power(10,C,mod1)%mod1-(A%B*power(10,C,B)%B)%mod1;
		bunshi1%=mod1;
		if(bunshi1<0){
			bunshi1+=mod1;
		}
		int b_1=0;
		int B_sub=B;
		while(B_sub%2==0){
			B_sub/=2;
			b_1++;
		}
		bunshi1>>=b_1;
		int inv_1=inverse(B_sub,mod1);
		int ans_1=inv_1*bunshi1%2;
		int bunshi2=A%mod2*power(10,C,mod2)%mod2-(A%B*power(10,C,B)%B)%mod2;
		bunshi2%=mod2;
		if(bunshi2<0){
			bunshi2+=mod2;
		}
		int b_2=0;
		B_sub=B;
		while(B_sub%5==0){
			B_sub/=5;
			b_2++;
		}
		bunshi1/=power(5,b_2,-1);
		int inv_2=inverse(B_sub,mod2);
		int ans_2=inv_2*bunshi2%5;
		for(int i=0;i<10;i++){
			if(i%2==ans_1 && i%5==ans_2){
				cout << i << endl;
				break;
			}
		}
	}
}
0