题意:给你一个数,问你有多少种进制对n的表示,存在后导零;
1.挺简单的,画画一个数转化为二进制是怎么转化过来的,就可以看出来求出非1的因子个数有多少个就可以了
用1进制表示没意义
#include <bits/stdc++.h>
#define inF 0x3f3f3f3f
#define X 10005
#define PI 3.141592653589793238462643383
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
typedef long long ll;
const int maxn = 1e6+10;
const int Times=10;
const ll inf= 9223372036854775807;
int N=1e6+10;
int primer[maxn],a[maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int cnt=0;
for(ll i=2; i<N; ++i) //int 1e6不加 int 就 RE
{
if(!a[i])
{
primer[cnt++]=i;
for(ll j=i*i; j<N; j+=i) //如果是 j<N , 可以表示出sqrt(N)-N之间的素数,但这些素数绝对不是N的因子的
a[j]=1;
}
}
int t;
cin>>t;
for(int ca=1; ca<=t; ++ca)
{
ll n;
cin>>n;
ll sum=1;
for(int i=0; i<cnt&&primer[i]*primer[i]<=n; ++i)
{
if(n%primer[i]==0)
{
int ans=0;
while(n%primer[i]==0)
{
ans++;
n/=primer[i];
}
sum=sum*(1+ans);
}
}
if(n!=1)
sum*=2;
cout<<"Case "<<ca<<": "<<sum-1<<endl;
}
return 0;
}