第一道:Rightmost digit

求N^N次最后一个数字

快速幂mod10咯

代码如下:

#include <cstdio>
#define ll long long
using namespace std;
const int mod = ; int qm(ll a,ll b) {
ll res = ;
while (b) {
if (b & ) res = res * a % mod;
a = a * a % mod; b >>= ;
}
return (int)res;
} int main() {
int T; scanf("%d", &T);
while (T--) {
int n;
scanf("%d", &n);
printf("%d\n", qm((ll)n, (ll)n));
}
return ;
}

好像可以打表找规律。

第二道:又见GCD

从2*b开始枚举c就可以啦

代码如下:

#include <cstdio>
using namespace std; int gcd(int a, int b) {
return b == ? a : gcd(b, a % b);
} int main() {
int n; scanf("%d", &n);
while (n--) {
int a, b;
scanf("%d%d", &a, &b);
for (int i = ; ; i++) {
int c = i * b;
if (gcd(a, c) == b) {
printf("%d\n", c);
break;
}
}
}
return ;
}

第三道:A / B

求 (A / B) % 9973

就是求A * INV(B) % 9973咯

由费马小定理 a^(p-1) ≡ 1(mod p)

所以 a * a^(p-2) ≡ 1(mod p)

所以INV(B) = b ^ (MOD-2)

代码如下:

#include <cstdio>
#define ll long long
using namespace std;
const int mod = ; int qm(ll a,ll b) {
ll res = ;
while (b) {
if (b & ) res = res * a % mod;
a = a * a % mod; b >>= ;
}
return (int)res;
} int main() {
int T; scanf("%d", &T);
while (T--) {
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", a * qm((ll)b, (ll)mod - ) % mod);
}
return ;
}

第四道:Fibonacci

最基本的矩阵快速幂(今天才学(可见刷题数量之少,以及之菜

和普通快速幂一个道理,就是加上矩阵相乘,以及定义ans变量的时候要定义成单位矩阵的形式

#include <cstdio>
using namespace std;
const int mod = ;
struct Matrix {
int m[][];
} ans, base; Matrix mul(Matrix a, Matrix b) {
Matrix temp;
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
temp.m[i][j] = ;
for (int k = ; k < ; k++) {
temp.m[i][j] = (temp.m[i][j] + a.m[i][k] * b.m[k][j]) % mod;
}
}
}
return temp;
} int qm(int n) {
base.m[][] = base.m[][] = base.m[][] = ;
base.m[][] = ;
ans.m[][] = ans.m[][] = ;
ans.m[][] = ans.m[][] = ;
while (n) {
if (n & ) ans = mul(ans, base);
base = mul(base, base);
n >>= ;
}
return ans.m[][];
} int main() {
int n;
while (~scanf("%d", &n) && n != -) {
printf("%d\n", qm(n));
}
return ;
}

第五道:Play with Floor and ceil

扩展欧几里得算法

分为x % k == 0 和 不等于 0 两种情况

如果x % k == 0 直接找一个p + q = k的解打印就好了

如果不整除

令 a = [x / k] 即求 x = a * p + (a + 1) * q 一组整数解

又因为GCD(a, a + 1) = 1 所以就可以先用扩展欧几里得算法求a * p + (a + 1) * q = 1

p q再分别乘以x就好了

#include <cstdio>
#define ll long long
using namespace std; void extgcd(ll a, ll b, ll& d, ll& x, ll& y) {
if (b) {
extgcd(b, a % b, d, y, x);
y -= (a / b) * x;
} else {
d = a;
x = , y = ;
}
} int main() {
int T; scanf("%d", &T);
while (T--) {
ll x, k;
scanf("%lld%lld", &x, &k);
if (x % k == ) {
printf("%d %lld\n", , k);
continue;
}
ll p, q;
ll a = x / k;
ll d;
extgcd(a, a + , d, p, q);
p *= x / d, q *= x / d;
printf("%lld %lld\n", p, q);
}
return ;
}

第六道:zhx's contest

给定一个数n,求先增后减或先减后增或单调增或单调减的排列个数

先看 1,2,...,n

考虑把这个序列变成先增后减的情况 那么就有一个地方得容纳n

从左边n-1个数取0个放到n的右边 C(n-1, 0)

取1个  C(n-1, 1)

取两个 C(n-1, 2) 这两个元素取出来后放到n的右边只有一种排列方式, 就是从大到小排 因为要先增后减 到了n已经停止增 所以只能减

取3个   C(n-1, 3)

......

取n-1个 C(n-1, n-1)

那么可能数就为 C(n-1,0) + C(n-1,1) + ... + C(n-1, n-1) = (1 + 1) ^ (n - 1) = 2 ^ (n - 1)

那么对印的先减后增也是 2 ^ (n - 1)

但是会重复算单调增和单调减的序列

所以答案就是 2^n - 2

n, p <= 1e18

在快速幂的过程中很有可能会溢出long long

所以加上快速乘法(用加法模拟乘法,每一次都取模,这样保证不会溢出)

特判一下1的情况

代码如下:

#include <cstdio>
#define ll long long
using namespace std; ll quick_mul(ll a, ll b, ll mod) {
ll ans = ;
while (b) {
if (b & ) ans = (ans + a) % mod;
a = (a + a) % mod;
b >>= ;
}
return ans;
} ll quick_mod(ll a, ll b, ll mod) {
ll ans = ;
while (b) {
if (b & ) {
ans = quick_mul(ans, a, mod) % mod;
}
a = quick_mul(a, a, mod) % mod;
b >>= ;
}
return ans;
} int main() {
ll n, q;
while (~scanf("%lld%lld", &n, &q)) {
if (n == ) printf("%lld\n", % q);
else
printf("%lld\n", (quick_mod(, n, q) - + q) % q);
}
return ;
}

2.23日刷数论题后总结(题目整理自SCUT的更多相关文章

  1. 苹果越狱后必备软件,总有你需要的!11月23日追加14个,支持【iOS4】

    http://bbs.dospy.com/thread-7398730-1-301-2.html越狱后必备软件,总有你需要的!11月23日追加14个,支持[iOS4]   背景自定义插件

  2. 北京Uber优步司机奖励政策(11月23日~11月29日)

    用户组:人民优步"关羽组"(适用于11月23日-11月29日)奖励政策: 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最 ...

  3. 北京Uber优步司机奖励政策(12月23日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  4. Linux自用指令——2019年10月23日

    1.ls ls命令是列出目录内容(List Directory Contents)的意思.运行它就是列出文件夹里的内容,可能是文件也可能是文件夹. ls -a 列出目录所有文件,包含以.开始的隐藏文件 ...

  5. Dataworks批量刷数优化方案探讨

    Dataworks批量刷数优化方案探讨 在数据仓库的日常使用中,经常会有批量补数据,或者逻辑调整后批量重跑数据的场景. 批量刷数的实现方式,因调度工具差异而各有不同. Dataworks调度批量刷数局 ...

  6. [分享] 从定制Win7母盘到封装详细教程 By BILL ( 10月23日补充说明 )

    [分享] 从定制Win7母盘到封装详细教程 By BILL ( 10月23日补充说明 ) billcheung 发表于 2011-10-23 00:07:49 https://www.itsk.com ...

  7. Week16(12月23日):复习

    Part I:提问 =========================== 1.声明强类型视图时,使用关键字(    ) A.ViewBag    B.model    C.Type    D.Tit ...

  8. FJUT-这还是一道数论题

    这还是一道数论题 TimeLimit:4000MS  MemoryLimit:128MB 64-bit integer IO format:%lld Special Judge   Problem D ...

  9. 北京Uber优步司机奖励政策(4月23日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

随机推荐

  1. python日志等级输出删选

    有时候我们会删选一下输出的信息 当做日志进行文件保存 但是我们程序中有可能有自己不想存到日志文件中的输出信息 我们要做一些的删选  然后进行保存 代码如下: #!/usr/bin/python # - ...

  2. keystone系列四:keystone部署及操作

    一 前言 任何软件的部署都是没有技术含量的,任何就部署讲部署的人都是江湖骗子. 部署的本质就是拷贝,粘贴,回车.我们家养了条狗,它可以胜任这件事情. 我们搞技术的,一定不能迂腐:轻信或者一概不信. 轻 ...

  3. [Spark][kafka]kafka 生产者,消费者 互动例子

    [Spark][kafka]kafka 生产者,消费者 互动例子 # pwd/usr/local/kafka_2.11-0.10.0.1/bin 创建topic:# ./kafka-topics.sh ...

  4. .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中

    不知你是否见过 try { } finally { } 代码中,try 块留空,而只往 finally 中写代码的情况呢?这种写法有其特殊的目的. 本文就来说说这种不一样的写法. 你可以点开这个链接查 ...

  5. 一篇 JPA 总结

    概述 下面是 JDBC 在 Java 应用和数据库之间的位置,充当着一个中间者,供 Java 应用程序访问所有类别的数据库,建立一个标准 JPA 如同 JDBC 一样,为 Java 应用程序使用 OR ...

  6. 我去年码了个表(WPF MvvM)

    又快个把月没写博客了(最近忙着学JAVA去了,都是被逼的/(ㄒoㄒ)/~~),然后用WPF码了个表,其实想加上那种提醒功能什么的,额,就这样了吧,主要是感受一下数据驱动的思想. 效果如下: 前端XAM ...

  7. Python全栈开发之路 【第七篇】:面向对象编程设计与开发(1)

    本节内容 一.编程范式 编程指的是写程序.敲代码,就是指程序员用特定的语法.数据结构和算法编写的代码,目的是来告诉计算机如何执行任务的. 在编程的世界里最常见的两大流派是:面向过程与面向对象.“功夫的 ...

  8. 11076: 小P的集合 位运算

    考虑当只有一个数出现奇数次的时候,我们可以很轻松的知道,把所有的数异或和即可,因为异或运算有一个非常有意思的性质,a^b^a=b 考虑当有两个数(a,b)出现奇数次的时候,我们异或和得到,num=a^ ...

  9. Tea Party CodeForces - 808C (构造+贪心)

    Polycarp invited all his friends to the tea party to celebrate the holiday. He has ncups, one for ea ...

  10. Day12 Python基础之生成器、迭代器(高级函数)(十)

    https://www.cnblogs.com/yuanchenqi/articles/5769491.html 1. 列表生成式 我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7 ...