题意:
给你一个整数n, n <= 10^12, 求在2-inf进制的表示中, 有多少表示形式末尾为0;
分析:
末尾为0, 则满足该进制能整数n即可, 故问题转换为求n的约数数
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
ll prime[1000010], n;
int t, pnum, ca = 1;
bool vis[1000010];
void get_prime() {
memset(vis, 0, sizeof(vis));
pnum = 0;
for(int i=2; i<=1000000; i++) if(!vis[i]) {
prime[++pnum] = i;
for(int j=i*2; j<=1000000; j+=i)
vis[j] = 1;
}
}
ll f(ll n) {
ll ans = 1;
for(int i=1; i<=pnum &&prime[i]*prime[i] <= n; i++)
if(n % prime[i] == 0) {
ll cnt = 0;
while(n % prime[i] == 0) {
cnt++;
n /= prime[i];
}
ans *= (cnt + 1);
}
if(n > 1) ans *= 2;
return ans - 1;
}
int main() {
get_prime();
scanf("%d", &t);
while(t--) {
scanf("%lld", &n);
printf("Case %d: ", ca++);
if(n == 1) {
printf("0\n");
continue;
}
else
printf("%lld\n", f(n));
}
return 0;
}

302

被折叠的 条评论
为什么被折叠?



