九度[1085]求root(N,K)

 1 # include<iostream>
 2 using namespace std;
 3 int main(){
 4     long long int x=0,y=0,k=0;
 5     while(cin>>x>>y>>k)
 6     {
 7         long long int sum=1;
 8         k--;
 9         while(y)
10         {
11             if(y%2!=0) sum=(sum*x)%k;
12             x=(x*x)%k;
13             y=y/2;
14         }
15         if(sum==0) cout<<k<<endl;
16         else cout<<sum<<endl;
17     }
18     return 0;
19 }

参考论坛代码,以及相关博客自己总结如下:

如果N>=K  则N=a0+a1*k+a2*k2+……+an*kn;

N(r)=a0+a1+a2+a3+……+an;

N-N(r)=a1*(k-1)+a2*(k2-1)+……+an(kn-1)

(N-N(r))%(k-1)=0;

N(r)=N%(k-1);

故如果N(r)==0 N=k-1;

否则,N(r)就是我们要求的结果;

至于求N,则用到了快速幂取模:(a*b)mod n = ((a mod n) * b ) mod n;

时间: 2024-10-11 01:41:03

九度[1085]求root(N,K)的相关文章

九度OJ 1085 清华大学2010机试《求root(N,k)》

题目1085:求root(N, k) 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1191 解决:443 题目描述: N<k时,root(N,k) = N,否则,root(N,k) = root(N',k).N'为N的k进制表示的各位数字之和.输入x,y,k,输出root(x^y,k)的值 (这里^为乘方,不是异或),2=<k<=16,0<x,y<2000000000,有一半的测试点里 x^y 会溢出int的范围(>=2000000000) 输入: 每组测

九度oj 题目1085:求root(N, k) 清华2010年机试题目

题目描述: N<k时,root(N,k) = N,否则,root(N,k) = root(N',k).N'为N的k进制表示的各位数字之和.输入x,y,k,输出root(x^y,k)的值 (这里^为乘方,不是异或),2=<k<=16,0<x,y<2000000000,有一半的测试点里 x^y 会溢出int的范围(>=2000000000) 输入: 每组测试数据包括一行,x(0<x<2000000000), y(0<y<2000000000), k(

九度OJ 1371 最小的K个数

#include<stdlib.h> #include<stdio.h> #include<queue> using namespace std; int main(){ int k,n; while(~scanf("%d%d",&n,&k)) { priority_queue<int,vector<int>,greater<int> >q; int t; for(int i=0;i<n;++

九度OJ 1174 查找第K小数 (STL)

题目1174:查找第K小数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5161 解决:2081 题目描述: 查找一个数组的第K小的数,注意同样大小算一样大. 如  2 1 3 4 5 2 第三小数为3. 输入: 输入有多组数据. 每组输入n,然后输入n个整数(1<=n<=1000),再输入k. 输出: 输出第k小的整数. 样例输入: 6 2 1 3 5 2 2 3 样例输出: 3 根据题意,因为相同大小,算一样大,所以,排序后得去重. #include<iostream&

九度OJ&amp;北邮机试题题解(北邮2010网院)

题目一.九度OJ-1173:查找(水题随便搞) ac.jobdu.com/problem.php?pid=1173 题目描述: 输入数组长度 n 输入数组      a[1...n] 输入查找个数m 输入查找数字b[1...m] 输出 YES or NO  查找有则YES 否则NO . 输入: 输入有多组数据. 每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m<=n<=100). 输出: 如果在n个数组中输出YES否则输出NO. 样例输入: 5 1 5 2 4 3 3

剑指OFFER之最小的K个数(九度OJ1371)

题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 输入: 每个测试案例包括2行: 第一行为2个整数n,k(1<=n,k<=200000),表示数组的长度. 第二行包含n个整数,表示这n个数,数组中的数的范围是[0,1000 000 000]. 输出: 对应每个测试案例,输出最小的k个数,并按从小到大顺序打印. 样例输入: 8 4 4 5 1 6 2 7 3 8 样例输出: 1 2 3 4 解题思路: 我们通过

区间和问题——九度 1554

对应 九度 题目:点击打开链接 题目描述: 给定一个数组,判断数组内是否存在一个连续区间,使其和恰好等于给定整数k. 输入: 输入包含多组测试用例,每组测试用例由一个整数n(1<=n<=10000)开头,代表数组的大小. 接下去一行为n个整数,描述这个数组,整数绝对值不大于100. 最后一行为一个整数k(大小在int范围内). 输出: 对于每组测试用例,若存在这个连续区间,输出其开始和结束的位置,s,e(s <= e). 若存在多个符合条件的输出,则输出s较小的那个,若仍然存在多个,输出

九度OJ&amp;北邮机试题(2010计算机)

题目一.九度OJ-1169:比较奇偶数个数 http://ac.jobdu.com/problem.php?pid=1169 题目描述: 第一行输入一个数,为n,第二行输入n个数,这n个数中,如果偶数比奇数多,输出NO,否则输出YES. 输入: 输入有多组数据. 每组输入n,然后输入n个整数(1<=n<=1000). 输出: 如果偶数比奇数多,输出NO,否则输出YES. 样例输入: 5 1 5 2 4 3 样例输出: YES 直接来代码: AC代码: /** *@xiaoran */ #inc

九度 1104 以及 辗转相除法的原理f昂发

//方法一 //对每个形如 (A*a+ B)* a^k的数,前面的A 没有意义的,只有B //才有可能继续被用来作为未来的因子,所以每次只需要保留比a小的B 就够了.代码如下: #include <cstdio> #include <iostream> #include <cstring> using namespace std; #ifdef ONLINE_JUDGE #define FINPUT(file) 0 #define FOUTPUT(file) 0 #el