
数论
数学方面的算法内容
小王子y
互关啊!!
展开
-
阶乘的非零k位尾数(巧妙做法)
“求 N 阶乘末尾的第一个非零数字”是一道常见的企业笔试题。这里我们略微做个变化,求 N 阶乘末尾的第一个非零 K 位数,同时输出末尾有多少个零。输入格式:输入给出一个不超过 107 的正整数 N 和要求输出的位数 0<K<10。输出格式:在一行中输出 N 阶乘末尾的第一个非零 K 位数(注意前导零也要输出)、以及末尾 0 的个数,其间以 1 个空格分隔。输入样例:18 5输出样例:05728 3思路:对于第一个非零 K 位数,从K比较小(0<K<原创 2021-04-20 10:12:41 · 379 阅读 · 0 评论 -
波动数列(DP)
观察这个数列:1 3 0 2 -1 1 -2 …这个数列中后一项总是比前一项增加2或者减少3,且每一项都为整数。栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加 a 或者减少 b 的整数数列可能有多少种呢?输入格式共一行,包含四个整数 n,s,a,b,含义如前面所述。输出格式共一行,包含一个整数,表示满足条件的方案数。由于这个数很大,请输出方案数除以 100000007 的余数。数据范围1≤n≤1000,−109≤s≤109,1≤a,b≤106输入样例原创 2021-03-04 13:16:08 · 239 阅读 · 1 评论 -
五指山(线性同余方程,扩展gcd)
大圣在佛祖的手掌中。我们假设佛祖的手掌是一个圆圈,圆圈的长为 n,逆时针记为:0,1,2,…,n−1,而大圣每次飞的距离为 d。现在大圣所在的位置记为 x,而大圣想去的地方在 y。要你告诉大圣至少要飞多少次才能到达目的地。注意:孙悟空的筋斗云只沿着逆时针方向翻。输入格式有多组测试数据。第一行是一个正整数 T,表示测试数据的组数;每组测试数据包括一行,四个非负整数,分别为如来手掌圆圈的长度 n,筋斗所能飞的距离 d,大圣的初始位置 xx 和大圣想去的地方 y。输出格式对于每组测试数据,输出原创 2021-02-28 00:35:03 · 177 阅读 · 0 评论 -
线性同余方程
给定nn组数据ai,bi,mi,对于每组数求出一个xi,使其满足ai∗xi≡bi(mod mi),如果无解则输出impossible。输入格式第一行包含整数n。接下来n行,每行包含一组数据ai,bi,mi。输出格式输出共n行,每组数据输出一个整数表示一个满足条件的xi,如果无解则输出impossible。每组数据结果占一行,结果可能不唯一,输出任意一个满足条件的结果均可。输出答案必须在int范围之内。数据范围1≤n≤105,1≤ai,bi,mi≤2∗109输入样例:22 3 64原创 2021-02-27 22:53:49 · 193 阅读 · 0 评论 -
扩展欧几里得算法
给定n对正整数ai,bi,对于每对数,求出一组xi,yi,使其满足ai∗xi+bi∗yi=gcd(ai,bi)。输入格式第一行包含整数n。接下来n行,每行包含两个整数ai,bi。输出格式输出共n行,对于每组ai,bi,求出一组满足条件的xi,yi,每组结果占一行。本题答案不唯一,输出任意满足条件的xi,yi均可。数据范围1≤n≤105,1≤ai,bi≤2∗109输入样例:24 68 18输出样例:-1 1-2 1#include <iostream>#inc原创 2021-02-27 21:48:16 · 119 阅读 · 0 评论 -
数字转换(树形DP)
如果一个数 x 的约数之和 yy(不包括他本身)比他本身小,那么 x 可以变成 y,y 也可以变成 x。例如,4 可以变为 3,1 可以变为 7。限定所有数字变换在不超过 n 的正整数范围内进行,求不断进行数字变换且不出现重复数字的最多变换步数。输入格式输入一个正整数 n。输出格式输出不断进行数字变换且不出现重复数字的最多变换步数。数据范围1≤n≤50000输入样例:7输出样例:3样例解释一种方案为:4→3→1→74→3→1→7。1、如果一个数 x 的约数之和 y(不包括他本原创 2021-02-25 01:34:40 · 557 阅读 · 0 评论 -
蓝桥杯国赛 阶乘约数
【问题描述】定义阶乘 n! = 1 × 2 × 3 × · · · × n。请问 100! (100 的阶乘)有多少个约数。正确答案:39001250856960000思路:其实就是把从那些因子中挑出来问你最多能组成多少个数。为了防止2*3=6的重复计算,我们不能直接挑,所以要先用唯一分解定理分解成素因子乘积的形式如:5!=1*2*3*4*5=23*31*51;所以现在的情况变成了:2有4种选择(0、1、2、3个),3有2种选择(0、1个),5有2种选择(0、1个).即每个素因子的原创 2021-02-15 00:35:59 · 1649 阅读 · 2 评论 -
等差数列(数论最大公约数)
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N 个整数。现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?输入格式输入的第一行包含一个整数 N。第二行包含 N 个整数 A1,A2,⋅⋅⋅,AN。(注意 A1∼AN 并不一定是按等差数列中的顺序给出)输出格式输出一个整数表示答案。数据范围2≤N≤100000,0≤Ai≤109输入样例:52 6 4 10 20输出样例:10样例解释包含 2、6、4、10、2原创 2021-02-08 01:00:36 · 528 阅读 · 0 评论 -
序列的第k个数(快速幂)
BSNY 在学等差数列和等比数列,当已知前三项时,就可以知道是等差数列还是等比数列。现在给你 整数 序列的前三项,这个序列要么是等差序列,要么是等比序列,你能求出第 k 项的值吗。如果第 k 项的值太大,对其取模 200907。输入格式第一行一个整数 T,表示有 T 组测试数据;对于每组测试数据,输入前三项 a,b,c,然后输入 k。输出格式对于每组数据,输出第 k 项取模 200907 的值。数据范围1≤T≤100,1≤a≤b≤c≤109,1≤k≤109输入样例:21 2 3原创 2021-02-08 00:26:25 · 514 阅读 · 0 评论 -
筛质数(两种筛法)
给定一个正整数n,请你求出1~n中质数的个数。输入格式共一行,包含整数n。输出格式共一行,包含一个整数,表示1~n中质数的个数。数据范围1≤n≤106输入样例:8输出样例:4//朴素筛法#include <iostream>#include <algorithm>using namespace std;const int N= 1000010;int primes[N], cnt;bool st[N];void get_primes(in原创 2021-02-07 00:52:10 · 322 阅读 · 0 评论 -
USACO阶乘(数论)
#include <bits/stdc++.h>using namespace std;const int MOD = 1e9;int main() { int n; cin >> n; long long fac = 1; for(int i = 1; i <= n; i++) { fac *= i; while(!(fac % 10)) fac /= 10; fac %= MOD ;原创 2021-01-25 00:16:36 · 261 阅读 · 0 评论 -
回文质数(线性筛质数)
151 既是一个质数,又是一个回文数,因此它可以被称为回文质数。现在给定两个整数 a,b,请你找出在 [a,b] 范围内的所有回文质数。输入格式共一行,包含两个整数 a,b。输出格式按照从小到大的顺序输出所求范围内的所有回文质数。每个数占一行。数据范围5≤a<b≤10的8次方输入样例:5 500输出样例:5711101131151181191313353373383#include <iostream>#include <cstr原创 2021-01-09 01:45:12 · 1286 阅读 · 0 评论 -
第五届蓝桥杯省赛 蚂蚁感冒(最强代码 附带思路)
长 100 厘米的细长直杆子上有 n 只蚂蚁。它们的头有的朝左,有的朝右。每只蚂蚁都只能沿着杆子向前爬,速度是 1 厘米/秒。当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。这些蚂蚁中,有 1 只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。输入格式第一行输入一个整数 n, 表示蚂蚁的总数。接着的一行是 n 个用空格分开的整数 Xi,Xi 的绝对值表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数原创 2020-12-23 16:23:49 · 232 阅读 · 0 评论 -
L1-006 连续因子
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。输入格式:输入在一行中给出一个正整数 N(1<N<231 )。输出格式:首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1因子2……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。输入样例:630输出样例:35原创 2020-11-13 19:05:39 · 110 阅读 · 0 评论