题意:http://www.lightoj.com/volume_showproblem.php?problem=1028

求数字n有多少个因子数  不包括1

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<map>
#include<math.h>
#include<string>
#include<vector>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long
#define N 1000006
int ans=0,a[N],q[N];
void prime()///素数表  更省时
{
    for(int i=2;i<N;i++)
    {
        if(!a[i]) q[ans++]=i;
        for(int j=0;j<ans&&q[j]*i<N;j++)
        {
            a[q[j]*i]=1;
            if(i%q[j]==0) break;
        }
    }
}
int oula(LL n)
{
    if(n==0) return 0;
    int i=0,sum=1;
    while(n>=q[i]*q[i]&&i<ans)
    {
        int s=0;
        if(n%q[i]==0)
        {
            while(n%q[i]==0)
            {
                n=n/q[i];
                s++;
            }
        }
        i++;
        sum*=(s+1);
    }
    if(n!=1) sum*=2;
    return sum-1;///不包括1
}
int main()
{
    int T,t=1;
    LL n;
    prime();
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lld",&n);
        printf("Case %d: %d\n",t++,oula(n));
    }
    return 0;
}

 

posted on 2017-10-23 09:43  云胡不喜。  阅读(108)  评论(0编辑  收藏  举报