Codeforces Round #282 (Div. 2) B. Modular Equations

//#include<cstdio>
//#include<iostream>
//#include<algorithm>
//#include<vector>
//#include<cstring>
//#include<cmath>
//#include<map>
#include<bits/stdc++.h>
using namespace std;

#define fast ios_base::sync_with_stdio(false)
#define bfast cin.tie(0)
#define outs(x) cout << x << " "
#define outn(x) cout << x << "\n"
#define sf scanf
#define pf printf

typedef long long LL;
typedef vector<int>vii;
typedef vector<LL>vll;

int main()
{
    fast;
    LL a , b , cnt=0 , ans=0 , i , div=0, tmp=0;
    while(cin >> a >> b)
    {
        cnt=0;

        ans = a - b;

        if(ans < 0)
        {
            cout << "0\n";
            continue;
        }

        else if(ans == 0)
        {
            cout << "infinity\n";
            continue;
        }

        tmp = ans;

        ans = sqrt(double(ans));

        bool f=false , fl=false;

        if(b == 0)
        {
            //cout << ans << "\n";

            for(i=1; i*i<=tmp; i++)
            {
                f=fl=false;

                div = tmp / i;

                if(a % i == b)
                {
                    cnt++;
                    f=true;
                }

                if(a % div == b)
                {
                    cnt++;
                    fl=true;
                }

                if(f==true and fl==true)
                {
                    if(div == i) cnt--;
                }
            }

            outn(cnt);

            continue;
        }

        //cout << a - b << " ";

        if(a % (a - b) == b) cnt++;
        else cnt=0;

        for(i=2; i*i<=tmp; i++)
        {
            f=fl=false;

            div = tmp / i;

            if(a % i == b)
            {
                //cout << i << " ";
                cnt++;
                f=true;
            }

            if(a % div == b)
            {
                //cout << div << " ";
                cnt++;
                fl=true;
            }

            if(f==true and fl==true)
            {
                if(div == i) cnt--;
            }
        }

        //cout << "\ncnt = " << cnt << "\n";
        outn(cnt);
    }

    return 0;
}

Comments

Popular posts from this blog

SPOJ-CMG - Collecting Mango

LightOJ 1009 - Back to Underworld

LeetCode Palindrome Number