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 }

1054 - Efficient Pseudo Code的更多相关文章

  1. Lightoj 1054 - Efficient Pseudo Code

    题目连接: http://www.lightoj.com/volume_showproblem.php?problem=1054 题目大意: 给出n,m,问n^m的所有因子之和是多少? 解题思路: 补 ...

  2. LightOj1054 - Efficient Pseudo Code ( 求n的m次方的因子和 )

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1054 题意:给你两个数n和m, 求n^m的所有因子和,结果对1000000007求余; ...

  3. Android Programming: Pushing the Limits -- Chapter 2: Efficient Java Code for Android

    Android's Dalvik Java 与 Java SE 进行比较 Java代码优化 内存管理与分配 Android的多线程操作 Android’s Dalvik Java 与 Java SE ...

  4. 专题[vjudge] - 数论0.1

    专题[vjudge] - 数论0.1 web-address : https://cn.vjudge.net/contest/176171 A - Mathematically Hard 题意就是定义 ...

  5. Oracle Applications Multiple Organizations Access Control for Custom Code

    档 ID 420787.1 White Paper Oracle Applications Multiple Organizations Access Control for Custom Code ...

  6. PatentTips - Method and Apparatus to Support Virtualization with Code Patches

    BACKGROUND As recognized in Revision 2.0 of the Intel® Virtualization Technology Specification for t ...

  7. CV code references

    转:http://www.sigvc.org/bbs/thread-72-1-1.html 一.特征提取Feature Extraction:   SIFT [1] [Demo program][SI ...

  8. Java基础常见英语词汇

    Java基础常见英语词汇(共70个) ['ɔbdʒekt] ['ɔ:rientid]导向的                             ['prəʊɡræmɪŋ]编程 OO: object ...

  9. IT软件开发常用英语词汇

    Aabstract 抽象的abstract base class (ABC)抽象基类abstract class 抽象类abstraction 抽象.抽象物.抽象性access 存取.访问access ...

随机推荐

  1. 巩固javaweb的第二十天

    巩固内容: 同一个页面中的多个 form 在同一个页面中可以有多个 form 如果存在多个 form,那么提交信息的时候提交哪些信息,提交给哪个文件处理,这都 与提交按钮的位置有关.如果提交按钮在第一 ...

  2. oracle 预安装命令

     yum install oracle-rdbms-server-11gR2-preinstall-1.0-6.el6 

  3. InnoDB的行锁模式及加锁方法

    MYSQL:InnoDB的行锁模式及加锁方法 共享锁:允许一个事务度一行,阻止其他事务获取相同数据集的排他锁. SELECT * FROM table_name WHERE ... LOCK IN S ...

  4. vue-cli安装记录

    docker安装 docker network rm  mydkdocker network create --subnet=192.168.1.0/24 mydk cat centos-7-x86_ ...

  5. When do we pass arguments by reference or pointer?

    在C++中,基于以下如下我们通过以引用reference的形式传递变量. (1)To modify local variables of the caller function A reference ...

  6. 深入 char

    深入 char * ,char ** ,char a[ ] ,char *a[] 内核分类: c语言 2013-02-23 15:34 15176人阅读 评论(8) 收藏 举报Charcharchar ...

  7. HTTP协议及常见状态码

    超文本传输协议(HTTP)是用于传输诸如HTML的超媒体文档的应用层协议.它被设计用于Web浏览器和Web服务器之间的通信,但它也可以用于其他目的. HTTP遵循经典的客户端-服务端模型,客户端打开一 ...

  8. 图书管理系统总结——数据库操纵(二):DML语句

    这里以最基本的DML语句作为例子,其他各种复杂的DML语句可以根据这些基本JDBC语句得到. 一.查询表格 这里以两张表关联查询为例,采用动态方式,根据输入的条件在WHERE语句后面接上相应的各种条件 ...

  9. 最基础的SSM框架整合篇

    一.简单理解 Spring.Spring MVC和MyBatis的整合主要原理就是将我们在单独使用Spring MVC和MyBatis过程中需要自己实例化的类都交由Ioc容器来管理,过程分为两步: 第 ...

  10. Springboot集成SpringSecurity

    一.Spring security 是什么? Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架. 它提供了一组可以在Spring应用上 ...