• LightOJ1214 Large Division 基础数论+同余定理


    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
    ", i);
    39             }
    40             else
    41                 printf("Case %d: not divisible
    ", i);
    42 
    43         }
    44 
    45 }
  • 相关阅读:
    Finite Difference Method with Mathematica
    评论
    The Woman in Red Is Seen as a Threat by Other Wom
    Why Does Everyone Else Appear to Be Succeeding?
    The Sorrows of Young Werther
    【洛谷P5607】无力回天 NOI2017
    【YbtOJ#532】往事之树
    【YbtOJ#582】大收藏家
    【牛客Wannafly挑战赛23 F】计数
    【YbtOJ#573】后缀表达
  • 原文地址:https://www.cnblogs.com/Yumesenya/p/5347406.html
Copyright © 2020-2023  润新知