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 |
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 }
最新文章
- 一次莽撞的行为:在phpmyadmin中修改MySQL root密码后无法操作数据库
- js学习笔记3---自定义属性
- Unity小知识
- 解决Eclipse Debug 的source not found问题
- Bootstrap页面布局16 - BS导航菜单和其响应式布局以及导航中的下拉菜单
- trident 序列号问题
- C++的三大特性之一继承
- 2.2.2 从 Path 中获取信息
- libevent for qt网络模块
- android代码控制seekbar的样式
- Uva10290 - {Sum+=i++} to Reach N
- HDU 4430 &;amp; ZOJ 3665 Yukari&;#39;s Birthday(二分法+枚举)
- oracle commond
- mysql数据库第二弹
- word search(二维数组中查找单词(匹配字符串))
- python 基础-爬虫-数据处理,全部方法
- Java - 27 Java 集合框架
- C#零基础入门08:代码规范
- ubuntu搭建ftp服务器
- hdu 2199 Can you solve this equation? 二分
热门文章
- &#127942;【Alibaba中间件技术系列】「Sentinel技术专题」分布式系统的流量防卫兵的基本介绍(入门源码介绍)
- HBase【操作Java api】
- CORS 如果需要指定多个域名怎么办
- 前端必须知道的 Nginx 知识
- [php代码审计] Typecho 1.1 -反序列化Cookie数据进行前台Getshell
- Docker学习(一)——安装docker
- Running shell commands by C++
- 【Linux卷管理】LVM创建与管理
- python3约瑟夫环问题
- Linux入侵 反弹shell