题意:给定一个N,求有多少种进制表示N存在后导0。比如2的二进制为10。
思路:求N有多少个因子。
#include <bits/stdc++.h>
using namespace std;
long long num[100000];
int book[1000100];
int len;
void init()
{
num[0] = 1;
memset(book,0,sizeof(book));
len = 1;
for (int i = 2; i <= 1000000; i++)
{
if (book[i]==0)
{
num[len++] = i;
for (int j = i; j <= 1000000; j+=i)
{
book[j] = 1;
}
}
}
return ;
}
int main(void)
{
int T, cas = 1;
init();
scanf("%d", &T);
while (T--)
{
long long n;
int ans = 1;
scanf("%lld", &n);
for (int i = 1; i < len && num[i]*num[i]<=n; i++)
{
int res = 0;
while (n%num[i]==0)
{
n/=num[i];
res++;
}
ans *= (res+1);
}
if (n>1)
ans *= 2;
printf("Case %d: %d\n", cas++, ans-1);
}
return 0;
}