LightOj 1028

来源:互联网 发布:mac 进程管理器 编辑:程序博客网 时间:2024/05/20 14:43

lightoj 1028

题目大意:

nm进制数,要求最低位为0;

思路:

即求n的因子个数

n=p1q1p2q2pnqn;

ans=i=1n(1+qi);

素数打表,统计n每个因子的个数;

    #include <iostream>    #include <cstdio>    #include <algorithm>    #include <cstring>    #include <cstdlib>    #define N 1000005    #define LL long long    using namespace std;    bool not_prime[N];    int prim[N];    int cnt = 0;    void init()    {        memset(not_prime, 0, sizeof(not_prime));        prim[1] = 0;        for(int i = 2; i < N; i++)        {              if(!not_prime[i])            {                  prim[cnt++] = i;                for(int j = i + i; j < N; j += i)                {                      not_prime[j] = 1;                  }              }          }      }    void find(LL n)    {        LL ans = 1;        for (int i = 0; i < cnt && prim[i] * prim[i] <= n; i++)        {            if (n % prim[i] == 0)            {                int cnt = 0;                while (n % prim[i] == 0)                {                    cnt++;                    n /= prim[i];                }                // cout << prim[i] << ' ' << cnt << endl;                ans *= (1 + cnt);            }        }        if (n > 1)        {            ans *= 2;        }        printf("%lld\n", ans - 1);    }    int main()    {        init();        int T;        scanf("%d", &T);        for (int cas = 1; cas <= T; cas++)        {            LL n;            scanf("%lld", &n);            printf("Case %d: ", cas);            find(n);        }        return 0;    }
0 0
原创粉丝点击