[NOI2012] 随机数生成器 [CodeVS1281] Xn数列

2024-01-09 13:09

本文主要是介绍[NOI2012] 随机数生成器 [CodeVS1281] Xn数列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述 Description

给你6个数,m, a, c, x0, n, g

Xn+1 = ( aXn + c ) mod m,求Xn

m, a, c, x0, n, g<=10^18

输入描述 Input Description

一行六个数 m, a, c, x0, n, g

输出描述 Output Description

输出一个数 Xn mod g

样例输入 Sample Input

11 8 7 1 5 3

样例输出 Sample Output

2

题解

  • [xnc]=[xn1c][a101]
  • 甭管什么直接矩阵乘法都会爆炸QAQ
  • 所以模仿快速幂写个快速加(a*b=a+a+a+…..+a)
  • 其实你想更快的话,,你会发现那个2X2的矩阵的第2列是不变的,,
varm,a,c,x0,n,s,ans:int64;d,e,f,g:qword;t,y:array[1..2,1..2]of qword;i,j,k:longint;
function mmod(a,b:int64):qword;
var len:int64;
beginlen:=0;while b<>0 dobeginif (b and 1)=1then len:=(len+a)mod m;a:=(a*2)mod m;b:=b div 2;end;exit(len);
end;beginreadln(m,a,c,x0,n,s);t[1,1]:=1; t[1,2]:=0; t[2,1]:=0; t[2,2]:=1;y[1,1]:=a; y[1,2]:=0; y[2,1]:=1; y[2,2]:=1;while n<>0 dobeginif (n and 1)=1then begin {t=t*y}d:=(mmod(t[1,1],y[1,1])+mmod(t[1,2],y[2,1]))mod m;e:=(mmod(t[1,1],y[1,2])+mmod(t[1,2],y[2,2]))mod m;f:=(mmod(t[2,1],y[1,1])+mmod(t[2,2],y[2,1]))mod m;g:=(mmod(t[2,1],y[1,2])+mmod(t[2,2],y[2,2]))mod m;t[1,1]:=d; t[1,2]:=e; t[2,1]:=f; t[2,2]:=g;end;{y=y*y}d:=(mmod(y[1,1],y[1,1])+mmod(y[1,2],y[2,1]))mod m;e:=(mmod(y[1,1],y[1,2])+mmod(y[1,2],y[2,2]))mod m;f:=(mmod(y[2,1],y[1,1])+mmod(y[2,2],y[2,1]))mod m;g:=(mmod(y[2,1],y[1,2])+mmod(y[2,2],y[2,2]))mod m;y[1,1]:=d; y[1,2]:=e; y[2,1]:=f; y[2,2]:=g;n:=n div 2;end;ans:=(((mmod(x0,t[1,1])+mmod(c,t[2,1])+m)mod m)+s)mod s;writeln(ans);
end.

这篇关于[NOI2012] 随机数生成器 [CodeVS1281] Xn数列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/587212

相关文章

明明的随机数处理问题分析与解决方案

明明的随机数处理问题分析与解决方案 引言问题描述解决方案数据结构设计具体步骤伪代码C语言实现详细解释读取输入去重操作排序操作输出结果复杂度分析 引言 明明生成了N个1到500之间的随机整数,我们需要对这些整数进行处理,删去重复的数字,然后进行排序并输出结果。本文将详细讲解如何通过算法、数据结构以及C语言来解决这个问题。我们将会使用数组和哈希表来实现去重操作,再利用排序算法对结果

纸牌函数生成器

此模板用来生成纸牌类的测试数据,本人手打,不合理或缀余的地方希望大神指出。 T=10000(测试数据组数), t (两摞相等的牌,每摞牌的数量); 每张牌用A,2~9,T,J,Q,K;表示牌面大小; 用S,H,C,D;表示花色。 共52张牌。 #include<stdio.h>#include<time.h>#include<stdlib.h>#include<string.

【生日视频制作】酒吧一群美女车展模特大屏幕视频改字AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程酒吧一群美女车展模特大屏幕视频改字AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】酒吧一群美女车展模特大屏幕视频改字AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 安装AE软件 下载AE模板 把AE模板导入AE软件 修改图片或文字 渲染出视频

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

[Python]生成器和yield关键字

生成器和yield关键字 1.生成器介绍: 概述: ​ 它指的是 generator, 类似于以前学过的: 列表推导式, 集合推导式, 字典推导式… 作用: ​ 降低资源消耗, 快速(批量)生成数据. 实现方式: ​ 1.推导式写法. my_generator = (i for i in range(5)) ​ 2.yield写法. def get_generator():for i

Mybatis自动生成器的使用方式

文章目录 编写generator配置文件配置maven插件第一种启动方式第二种启动方式 编写generator配置文件 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration

【生日视频制作】劳斯莱斯库里南中控改名软件AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程豪车劳斯莱斯库里南中控改名软件AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】劳斯莱斯库里南中控改名软件AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 下载AE模板 安装AE软件 把AE模板导入AE软件 修改图片或文字 渲染出视频

【Python知识宝库】迭代器与生成器:高效处理大数据集

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、迭代器:逐个访问数据的艺术1. 迭代器的定义2. 自定义迭代器3. 迭代器的优势 二、生成器:按需生成数据的魔法1. 生成器的定义2. 创建生成器生成器函数生成器表达式 3. 生成器的优势 三、迭代器和生成器在处理

【练习7】Fibonacci数列

链接:https://www.nowcoder.com/practice/18ecd0ecf5ef4fe9ba3f17f8d00d2d66 分析: 当n为15的时候,可以用Math.min(c-n,n-b)来判断哪个是变成斐波那契数的最小步数。 public class Main {public static void main(String[] args) {Scanner i