Diophantus of Alexandria was an egypt mathematician living in Alexandria. He was one of the first mathematicians to study equations where variables were restricted to integral values. In honor of him, these equations are commonly called diophantine equations. One of the most famous diophantine equation is x^n + y^n = z^n. Fermat suggested that for n > 2, there are no solutions with positive integral values for x, y and z. A proof of this theorem (called Fermat's last theorem) was found only recently by Andrew Wiles. 

Consider the following diophantine equation:

1 / x + 1 / y = 1 / n where x, y, n ∈ N+ (1)

Diophantus is interested in the following question: for a given n, how many distinct solutions (i. e., solutions satisfying x ≤ y) does equation (1) have? For example, for n = 4, there are exactly three distinct solutions:

1 / 5 + 1 / 20 = 1 / 4 

1 / 6 + 1 / 12 = 1 / 4 

1 / 8 + 1 / 8 = 1 / 4

Clearly, enumerating these solutions can become tedious for bigger values of n. Can you help Diophantus compute the number of distinct solutions for big values of n quickly?

Input

The first line contains the number of scenarios. Each scenario consists of one line containing a single number n (1 ≤ n ≤ 10^9).

Output

The output for every scenario begins with a line containing "Scenario #i:", where i is the number of the scenario starting at 1. Next, print a single line with the number of distinct solutions of equation (1) for the given value of n. Terminate each scenario with a blank line.

Sample Input

2
4
1260

Sample Output

Scenario #1:
3 Scenario #2:
113

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define M 50005
int prime[50005];
void db()
{
int i,j;
memset(prime,0,sizeof(prime));
for(i=2; i<=M; i++)
{
if(prime[i]==0)
{
for(j=i+i; j<=M; j+=i)
{
prime[j]=1;
}
}
}
}
int main()
{ db();
int n,i,j,k,t;
scanf("%d",&t);
int sum;
int cnt=1;
while(t--)
{
sum=1; scanf("%d",&n);
for(i=2; i<=M; i++)
{
if(n==1)
break;
if(prime[i]==0)
{
k=0;
while(n%i==0)
{
k++;
n=n/i;
}
sum=sum*(2*k+1);
}
} if(n>1)
sum=sum*3;
printf("Scenario #%d:\n",cnt);
printf("%d\n\n",(sum+1)/2);
cnt++; }
return 0; }

最新文章

  1. DrawSVG - SVG 路径动画 jQuery 插件
  2. 20145205 java语言实现数据结构实验一
  3. 【BZOJ】2938: [Poi2000]病毒
  4. Core Data入门
  5. 协处理器CP15
  6. Tkinter教程之Toplevel篇
  7. 推荐几本C#程序员阅读的书籍
  8. ubuntu中vi在编辑状态下方向键不能用的解决
  9. Java环境的安装与配置
  10. gitignore忽略规则
  11. webpack学习之路01
  12. 详细QRCode生成二维码和下载实现案例
  13. 使用 Swoole 来加速 Laravel应用
  14. 3.基于梯度的攻击——PGD
  15. 自动弹出pickerview
  16. awk\sed\grep 补充
  17. vue 国际化i18n 多语言切换
  18. sql server I/O硬盘交互
  19. 关于EF实体类的一点思考
  20. WebDriver基本操作入门及UI自动化练手页面

热门文章

  1. MySQL在cmd和python下的常用操作
  2. POJ 3714 分治/求平面最近点对
  3. Angular04 组件动态地从外部接收值、在组件中使用组件
  4. Eclipse安装Web/JavaEE插件、Eclipse编写HTML代码
  5. SQL server2008无法收缩日志
  6. HDOJ 1164 Eddy&#39;s research I
  7. 算法Sedgewick第四版-第1章基础-017一约瑟夫问题(Josephus Problem)
  8. loj10088 出纳员问题
  9. serializeArray()和.serialize()的区别、联系
  10. C++面试笔记--STL模板与容器