1054 - Efficient Pseudo Code
Time Limit: 1 second(s) Memory Limit: 32 MB

Sometimes it's quite useful to write pseudo codes for problems. Actually you can write the necessary steps to solve a particular problem. In this problem you are given a pseudo code to solve a problem and you have to implement the pseudo code efficiently. Simple! Isn't it? :)

pseudo code

{

take two integers n and m

let p = n ^ m (n to the power m)

let sum = summation of all the divisors of p

let result = sum MODULO 1000,000,007

}

Now given n and m you have to find the desired result from the pseudo code. For example if n = 12 and m = 2. Then if we follow the pseudo code, we get

pseudo code

{

take two integers n and m

so, n = 12 and m = 2

let p = n ^ m (n to the power m)

so, p = 144

let sum = summation of all the divisors of p

so, sum = 403, since the divisors of p are 1, 2, 3, 4, 6, 8, 9, 12, 16, 18, 24, 36, 48, 72, 144

let result = sum MODULO 1000,000,007

so, result = 403

}

Input

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

Each test case will contain two integers, n (1 ≤ n) and m (0 ≤ m). Each of n and m will be fit into a 32 bit signed integer.

Output

For each case of input you have to print the case number and the result according to the pseudo code.

Sample Input

Output for Sample Input

3

12 2

12 1

36 2

Case 1: 403

Case 2: 28

Case 3: 3751


PROBLEM SETTER: JANE ALAM JAN
思路:先打表素数,然后我们先将每个x分解成各个质因数的和,然后我们知道sum=(p10+p11+...p1r1)*(p20+p21+....p2r2)*...
pi为质因数,ri为每个质因数的个数乘以y,那么每项用等比数列求和公式求下,然后(1-qr+1)/(1-q);然后费马小定理求下逆元即可。
  1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<stdlib.h>
6 #include<queue>
7 #include<stack>
8 using namespace std;
9 bool prime[1000000];
10 int ans[1000000];
11 int mod=1e9+7;
12 typedef long long LL;
13 typedef struct pp
14 {
15 int x;
16 int y;
17 } ss;
18 ss sum[1000];
19 stack<ss>que;
20 LL quick(LL n,LL m);
21 int main(void)
22 {
23 memset(prime,0,sizeof(prime));
24 int i,j,k;
25 for(i=2; i<=1000; i++)
26 {
27 if(!prime[i])
28 {
29 for(j=i; (i*j)<=1000000; j++)
30 {
31 prime[i*j]=true;
32 }
33 }
34 }
35 int cnt=0;
36 for(i=2; i<=1000000; i++)
37 {
38 if(!prime[i])
39 {
40 ans[cnt++]=i;
41 }
42 }
43 scanf("%d",&k);
44 int s;
45 LL x,y;
46 for(s=1; s<=k; s++)
47 {
48 scanf("%lld %lld",&x,&y);
49 int tt=0;
50 int id=0;
51 int an=0;
52 while(x>1&&tt<cnt)
53 {
54 if((LL)ans[tt]*(LL)ans[tt]>x)
55 { if(an!=0)
56 {
57 ss dd;
58 dd.x=ans[tt];
59 dd.y=an;
60 que.push(dd);
61 an=0;
62 }
63 break;
64 }
65 else if(x%ans[tt]==0)
66 {
67 an++;
68 x/=ans[tt];
69 if(x==1)
70 { ss dd;
71 dd.x=ans[tt];
72 dd.y=an;
73 que.push(dd);
74 an=0;
75 }
76 }
77 else if(x%ans[tt]!=0)
78 {
79 if(an!=0)
80 {
81 ss ask;
82 ask.x=ans[tt];
83 ask.y=an;
84 que.push(ask);
85 an=0;
86 }
87 tt++;
88 }
89 }
90 if(!que.empty())
91 {
92 ss ap=que.top();
93 if(x!=1)
94 {
95 if(x!=ap.x)
96 {
97 ss ask;
98 ask.x=x;
99 ask.y=1;
100 que.push(ask);
101 }
102 else
103 {
104 ss dd=que.top();
105 que.pop();
106 dd.y+=1;
107 que.push(dd);
108 }
109 }
110 }
111 else
112 {
113
114 if(x!=1)
115 {
116 ss ask;
117 ask.x=x;
118 ask.y=1;
119 que.push(ask);}
120
121 }
122 int vv=0;
123 while(!que.empty())
124 {
125 sum[vv]=que.top();
126
127 que.pop();
128 vv++;
129 }
130 LL ac=1;
131 for(i=0; i<vv; i++)
132 {
133 //printf("%d %d\n",sum[i].x,sum[i].y);
134 LL q=sum[i].x-1;
135 LL ni=quick((LL)q,(LL)(mod-2));
136 LL r=(sum[i].y*y+1)%(mod-1);
137 LL p=quick((LL)sum[i].x,(LL)(r));
138 p-=1;
139 p=(p%mod+mod)%mod;
140 p=p*ni%mod;
141 ac=ac*p%mod;
142 }
143 printf("Case %d:",s);
144 printf(" %lld\n",ac%mod);
145 }
146 return 0;
147 }
148 LL quick(LL n,LL m)
149 {
150 LL ak=1;
151 n%=mod;
152 while(m)
153 {
154 if(m&1)
155 {
156 ak=(ak%mod)*(n%mod)%mod;
157 }
158 n=(n*n)%mod;
159 m/=2;
160 }
161 return ak;
162 }

最新文章

  1. 一次莽撞的行为:在phpmyadmin中修改MySQL root密码后无法操作数据库
  2. js学习笔记3---自定义属性
  3. Unity小知识
  4. 解决Eclipse Debug 的source not found问题
  5. Bootstrap页面布局16 - BS导航菜单和其响应式布局以及导航中的下拉菜单
  6. trident 序列号问题
  7. C++的三大特性之一继承
  8. 2.2.2 从 Path 中获取信息
  9. libevent for qt网络模块
  10. android代码控制seekbar的样式
  11. Uva10290 - {Sum+=i++} to Reach N
  12. HDU 4430 &amp;amp; ZOJ 3665 Yukari&amp;#39;s Birthday(二分法+枚举)
  13. oracle commond
  14. mysql数据库第二弹
  15. word search(二维数组中查找单词(匹配字符串))
  16. python 基础-爬虫-数据处理,全部方法
  17. Java - 27 Java 集合框架
  18. C#零基础入门08:代码规范
  19. ubuntu搭建ftp服务器
  20. hdu 2199 Can you solve this equation? 二分

热门文章

  1. &#127942;【Alibaba中间件技术系列】「Sentinel技术专题」分布式系统的流量防卫兵的基本介绍(入门源码介绍)
  2. HBase【操作Java api】
  3. CORS 如果需要指定多个域名怎么办
  4. 前端必须知道的 Nginx 知识
  5. [php代码审计] Typecho 1.1 -反序列化Cookie数据进行前台Getshell
  6. Docker学习(一)——安装docker
  7. Running shell commands by C++
  8. 【Linux卷管理】LVM创建与管理
  9. python3约瑟夫环问题
  10. Linux入侵 反弹shell