E - Integer Divisibility 同余定理

E - Integer Divisibility

If an integer is not divisible by 2 or 5, some multiple of that number in decimal notation is a sequence of only a digit. Now you are given the number and the only allowable digit, you should report the number of digits of such multiple.

For example you have to find a multiple of 3 which contains only 1's. Then the result is 3 because is 111 (3-digit) divisible by 3. Similarly if you are finding some multiple of 7 which contains only 3's then, the result is 6, because 333333 is divisible by 7.

Input

Input starts with an integer T (≤ 300), denoting the number of test cases.

Each case will contain two integers n (0 < n ≤ 106 and n will not be divisible by 2 or 5) and the allowable digit (1 ≤ digit ≤ 9).

Output​​​​​​​

For each case, print the case number and the number of digits of such multiple. If several solutions are there; report the minimum one.

Sample Input

3

3 1

7 3

9901 1

Sample Output

Case 1: 3

Case 2: 6

Case 3: 12


同余定理就是  比如a ,b c三个数  a-b的值对C取余是一个整数;

例如  100-60   对8      40对8取余等于整数,并且 100 和60对8取余 的结果相同,就说 100和60 对8 同余;

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;

int main ()
{	
	int T;
	long long  n,dight;  
	int k = 1,ans;
	scanf("%d",&T);	
	int	h = 0;     //这是Case的那个变量 
	while(T--)
	{
		int k = 1;
		h++;       //case 让他每次循环都+1; 
		scanf("%lld%lld",&n,&dight);
		ans = dight%n;     //先取余 可能dight小于n; 
		while(ans%n!=0)    
		{                  // 这里只要这个while里不是0,就一直循环 循环的时候就会多层的  * 10+dight 
			ans = (ans*10+dight)%n;    //  同余定理公式 
			k++;                      //要输出的 位数  
		}
		printf("Case %d: %d\n",h,k);
	}
	return 0;
 } 

猜你喜欢

转载自blog.csdn.net/qq_42759323/article/details/81192693