1028 - Trailing Zeroes (I)
 

We know what a base of a number is and what the properties are. For example, we use decimal number system, where the base is 10 and we use the symbols - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. But in different bases we use different symbols. For example in binary number system we use only 0 and 1. Now in this problem, you are given an integer. You can convert it to any base you want to. But the condition is that if you convert it to any base then the number in that base should have at least one trailing zero that means a zero at the end.

For example, in decimal number system 2 doesn't have any trailing zero. But if we convert it to binary then 2 becomes (10)2 and it contains a trailing zero. Now you are given this task. You have to find the number of bases where the given number contains at least one trailing zero. You can use any base from two to infinite.

Input

Input starts with an integer T (≤ 10000), denoting the number of test cases.

Each case contains an integer N (1 ≤ N ≤ 1012).

Output

For each case, print the case number and the number of possible bases where N contains at least one trailing zero.

Sample Input

Output for Sample Input

3

9

5

2

Case 1: 2

Case 2: 1

Case 3: 1

Note

For 9, the possible bases are: 3 and 9. Since in base 39 is represented as 100, and in base 99 is represented as 10. In both bases, 9 contains a trailing zero.

分析:题目大意是一个数转化成任意进制后末尾有0的种数 ,就是求一个数的因子数,转化成n进制后末尾有0的数一定是原十进制数能被n整除,也就是说如果一个数是n的倍数的时候,一定能转换成n进制数末尾时0.

素数分解的唯一性:p1^x1*p2^x2...pn^xn(一个整数可唯一地分解为一些不同质因子的若干次方的乘积)

再根据乘法原理 因子个数为(x1+1)*(x2+1) + ... + (xn + 1)

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>

using namespace std;
typedef long long ll;
const ll N=1e6+10;
ll vis[N], prime[N];
ll k;

void init()
{
k = 0;
memset(vis,0,sizeof(vis));

for(ll i = 2; i <= N; i++)
{
if(!vis[i])
{
prime[k++] = i;

for(ll j = i * i; j <= N; j += i)
vis[j] = 1;
}
}
}
int main()
{
int T, cas;
ll n, ans;

init();

scanf("%d", &T);
cas = 0;
while(T--)
{
cas++;
ans = 1;

scanf("%lld", &n);

for(ll i = 0; i < k && prime[i] * prime[i] <= n; i++)
{
if(prime[i] > n)
break;

if(n % prime[i] == 0)
{
long long sum = 1;

while(n % prime[i] == 0)
{
sum++;
n /= prime[i];

}
ans *= sum;
}
}

if(n > 1)
ans *= 2;

printf("Case %d: %lld\n", cas, ans-1);

}

return 0;
}

最新文章

  1. Git 分支管理策略
  2. Swift 二维码扫描 简单实现
  3. 破解 AD_CM#3
  4. Delphi XE5教程7:单元引用和uses 子句
  5. Android项目实战--手机卫士24--程序锁的实现以及逻辑
  6. Qt在Windows下的三种编程环境搭建
  7. crawler_分布式网络爬虫的设计与实现_设计图
  8. CentOS系统通过PXE实现批量无人值守安装
  9. Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall / POJ 1274 The Perfect Stall(二分图最大匹配)
  10. #032 有空就看PTA
  11. word20170107当地交通 Local transportation有用的词和句子
  12. BBS论坛(十三)
  13. Bootstrap modal常用参数、方法和事件
  14. 通俗讲解:PoW共识机制与以太坊的关系、Ghost协议 及 PoS共识机制的变种---Casper
  15. 使用redis-cli --pipe快速插入数据
  16. Lucene 7.2.1 自定义Analyzer和TokenFilter
  17. 用VirtualBox快速安装虚拟机virtual Machine(Win7+IE10)
  18. spring4+springmvc+mybatis基本框架(app后台框架搭建一)
  19. Android字体简述
  20. css reset.css

热门文章

  1. 【转】.NET 在云原生时代的蜕变,让我在云时代脱颖而出
  2. mysql复习2
  3. 18个Java8日期处理的实践,对于程序员太有用了!
  4. python3装饰器-进阶
  5. 1.Java和Python的选择
  6. latex一些有用的写法
  7. 个人第四次作业——Alpha项目测试
  8. 团队项目-Beta冲刺2
  9. Irrelevant Elements UVA-1635 (二项式定理)
  10. Spring事务梳理