1214 - Large Division -- LightOj(大数取余)

http://lightoj.com/volume_showproblem.php?problem=1214

这就是一道简单的大数取余。

还想还用到了同余定理:

所谓的同余,顾名思义,就是许多的数被一个数d去除,有相同的余数。d数学上的称谓为模。如a=6,b=1,d=5,则我们说a和b是模d同余的。因为他们都有相同的余数1。

////

数学上的记法为:
a≡ b(mod d)
可以看出当n<d的时候,所有的n都对d同商,比如时钟上的小时数,都小于12,所以小时数都是模12的同商.
对于同余有三种说法都是等价的,分别为:
(1) a和b是模d同余的.
(2) 存在某个整数n,使得a=b+nd .
(3) d整除a-b.
可以通过换算得出上面三个说法都是正确而且是等价的.
 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>

using namespace std;
typedef long long LL;
#define N 100000
#define ESP 1e-8
#define INF 0x3f3f3f3f
#define memset(a,b) memset(a,b,sizeof(a))

int main()
{
    int T, t=1;
    scanf("%d", &T);
    while(T --)
    {
        char s[300];
        LL b;
        scanf("%s %lld", s, &b);
        if(b < 0)
            b = -b;

        printf("Case %d: ", t++);

        int len = strlen(s);
        if(len == 1 && s[0] == '0')
        {
            printf("divisible\n");
            continue;
        }

        LL sum = 0;
        for(int i=0; i<len; i++)
        {
            if(s[i] == '-')
                continue;

            sum = sum*10 + s[i]-'0';
            sum = sum%b;
        }

        if(sum == 0)
            printf("divisible\n");
        else
            printf("not divisible\n");
    }
    return 0;
}

 

posted @ 2016-06-01 16:39  啦咯  阅读(514)  评论(0编辑  收藏  举报