何为快速幂:
给定a,b,p; 范围
代码模板:
#include
#include
#include
using namespace std;
typedef long long LL;
int a,k,p;
int T;
int qmi(int a,int k,int p)
{
LL res = 1 % p;
while(k)
{
if(k & 1) res = res * a % p;
k >>= 1;
a = (LL)a * a % p;
}
return res;
}
int main()
{
cin>>T;
while(T--)
{
cin>>a>>k>>p;
cout
题目描述:
n 个小伙伴(编号从 00 到 n−1)围坐一圈玩游戏。
按照顺时针方向给 n 个位置编号,从 00 到 n−1。
最初,第 00 号小伙伴在第 00 号位置,第 11 号小伙伴在第 11 号位置,…,依此类推。
游戏规则如下:每一轮第 00 号位置上的小伙伴顺时针走到第 m 号位置,第 11 号位置小伙伴走到第 m+1 号位置,…,依此类推,第n−m号位置上的小伙伴走到第 0号位置,第n−m+1 号位置上的小伙伴走到第 1 号位置,…,第 n−1 号位置上的小伙伴顺时针走到第m−1 号位置。
现在,一共进行了 10^k 轮,请问 x 号小伙伴最后走到了第几号位置。
输入格式
输入共 1 行,包含 4 个整数 n、m、k、x,每两个整数之间用一个空格隔开。
输出格式
输出共 1 行,包含 1 个整数,表示 10^k 轮后 x 号小伙伴所在的位置编号。
数据范围
1 0 1≤x≤n,
0
输入样例:
10 3 4 5
输出样例:
5
解题思路:
可以画一个0-5的圈,m为2,0初始坐标为0,移动一次后为2,两次后4,三次恢复原位置。可以得到公式位置 = x + m * y % n (x为起始坐标,y为次数);
题中y为10^k,我们可以直接先求10^k%n的快速幂res,最后结果 = x + res * m % n;
参考代码:
#include
#include
#include
using namespace std;
typedef long long LL;
int n,m,k,x;
LL qmi(int a,int k)
{
LL res = 1 % n;
while(k)
{
if(k & 1) res = res * a % n;
k >>= 1;
a = a * a % n;
}
return res;
}
int main()
{
cin>>n>>m>>k>>x;
LL ans = qmi(10,k);
ans = x + m * ans;
cout
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 【python】Anaconda安装后打不开jupyter notebook(网页不自动跳出)
文章目录 一、遇到的问题:jupyter notebook网页不自动跳出 (一)输入jupyter notebook命令 (二)手动打开网页 二、解决办法:指定浏览器 (一)找文件 jupyter_notebook_config.py (二)修改配置文件,指定…