Given two integers, a and b, you should check whether a is divisible by b or not. We know that an integer a is divisible by an integer b if and only if there exists an integer c such that a = b * c.
Input
Input starts with an integer T (≤ 525), denoting the number of test cases.
Each case starts with a line containing two integers a (-10200 ≤ a ≤ 10200) and b (|b| > 0, b fits into a 32 bit signed integer). Numbers will not contain leading zeroes.
Output
For each case, print the case number first. Then print ‘divisible‘ if a is divisible by b. Otherwise print ‘not divisible‘.
Sample Input |
Output for Sample Input |
6 101 101 0 67 -101 101 7678123668327637674887634 101 11010000000000000000 256 -202202202202000202202202 -101 |
Case 1: divisible Case 2: divisible Case 3: divisible Case 4: not divisible Case 5: divisible Case 6: divisible |
题意:给出两个数a, b,问能否被b整除。
题解:基础数论。简单的同余定理应用,将a作为字串储存,相当于每x位(和b同位)模b一次,得到余数时相当于将这个区间改写成这个余数,移动区间继续运算。最终余数为零时代表可以被整除,非零则否。
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 #include <iostream> 5 #include <math.h> 6 #define ll long long 7 using namespace std; 8 9 char a[300]; 10 int main() 11 { 12 int T, x, s; 13 ll t, b; 14 scanf("%d", &T); 15 for(int i=1; i<=T; i++) 16 { 17 scanf("%s %lld", a, &b); 18 x=strlen(a); 19 if(a[0]==‘-‘)//注意负数变正 20 { 21 s=2; 22 t=a[1]-‘0‘; 23 } 24 else 25 { 26 s=1; 27 t=a[0]-‘0‘; 28 } 29 t=t%abs(b); 30 for(int j=s; j<x; j++) 31 { 32 t=(t*10+a[j]-‘0‘)%abs(b); //同余定理的应用 33 } 34 35 36 if(t==0) 37 { 38 printf("Case %d: divisible\n", i); 39 } 40 else 41 printf("Case %d: not divisible\n", i); 42 43 } 44 45 }