Number数论
文章平均质量分 56
Number数论
daq0411
这个作者很懒,什么都没留下…
展开
-
HDU - 7106 Function
因为在1~1e6中g(x)的种类共有54种,所以我们考虑对g(x)进行枚举,然后根据二次函数找最小值,将原式进行化简,得到f(x) = x^2^ (A * g(x) + B) + x (C * g(x)^2^ + D * g(x))然后分情况进行讨论:(注意取值的时候取的值要小于n)a>0开口向上,离对称轴越近函数值越小1.对称轴 < 0,最小值取gx[i][0];注意(gx[i][0] <= n )2.对称轴 > n,最小值取gx[i][upper_bound(g..原创 2021-08-30 18:49:39 · 87 阅读 · 0 评论 -
HDU - 6441 Find Integer (费马大定理,勾股数)
费马大定理:勾股数a2 + b2 = c2已知a,求b和c:(在这里我们分两种情况,a是奇数和a是偶数的情况)可以证明a2 + b2 = c2中符合的类型是奇2+ 偶2 = 奇2(在这里我们就不加以证明了)1、a是奇数设a = 2n+1,b = 2m,c = 2k+1;(2n+1)2 + (2m)2 = (2k+1)2;(2n+1)2 = (2k+1+2m) * (2k+1-2m);令2k+1-2m = 1(因为保证要整除,而且2k+1-2m是奇数,所以我们设1)所以①2k+1-2m原创 2021-08-28 09:43:39 · 79 阅读 · 0 评论 -
HDU7095 - Add or Multiply 1 (百度之星复赛)
因为加法和乘法的次数交换也不影响结果,所以我们先对其进行一个排序方便我们后续的处理,假设我们有n个加号,m个乘号。(n<=m)交换也同理if(n>m) swap(n,m);之后我们就要考虑情况的种类了,首先假设我们把n个加号可以分成1~n段(也就是把n个“不同的”加号分成k个集合,1 <= k <= n),然后我们对这k个集合进行全排列答案也就是A(k,k),这k段可以把m个乘号分成k-1,k,k+1段(需要注意的是如果n=m,则当k=n时,最多分成n段)然后对这k-1,k..原创 2021-08-22 09:50:14 · 226 阅读 · 0 评论 -
HDU-7018 Banzhuan(取模,数论)
刚开始不知道样例给的60哪来的,后面想明白了是先放到最上边等这个方块掉下去。最小的花费需要注意的是(1,1,z)(1<=z<=n)这一列没有,剩下的就是取模的问题了,这该死的取模!完整代码如下:#include<iostream>#include<cstdio>using namespace std;typedef __int128 ll;const int mod = 1e9+7;void scan(__int128 &x)//输入{ .原创 2021-08-04 09:58:04 · 238 阅读 · 0 评论 -
HDU-7004 签到
这道题的话打个表就很容易看出来要用快速幂求2的倍数,每隔一次操作结果就是上一步乘2。主要还是取模的问题,模不是负数,所以在取模的时候不能直接取模,如果我们要对x进行取模,我们可以写成==(x+mod)%mod==当时WA了以为是爆了,所以用了__int 128,事后发现不用这么麻烦,long long就可以了。完整代码如下:#include<iostream>#include<cstdio>using namespace std;typedef __int128 ll.原创 2021-08-01 22:45:55 · 74 阅读 · 0 评论 -
HDU-6999 萌新
不知道我脑子一天天在想什么题意找到一个 c 使得 a%c = b%c,分别找到 c 的最大和最小值,因为c-1是正整数,所以c > 1,找不到就输出-1。题解我们先排序,让a >= b,方便后续的操作;如果a = b ,最小为2,最大为a;如果a - b = 1,c最大最小都是-1;其他情况化简即可a % c = b % c=> (a - b) % c=> 所以 c 最大为 a - b;找最小的时候肯定是一个素数(如果是一个合数的话肯定也能继续分解),所以我..原创 2021-07-31 22:09:34 · 92 阅读 · 0 评论 -
Mod, Or and Everything(规律)
通过打表找规律就可以做,通过打表发现与(n-1)是2的几次幂有关,打表结果如下:通过寻得的规律代码如下:#include<iostream>using namespace std;int main(){ int t; cin >> t; while(t--){ long long n; cin >> n; long long ji = 1; long long ans = 0; n--; while(n/2){ ans ..原创 2021-07-25 21:45:19 · 284 阅读 · 0 评论 -
计算阶乘中质因数的和
计算阶乘中质因数的和假如我们要求的是9!中可以分解为多少个2方法一:暴力也就是挨个遍历int cnt = 0;for(int i=1;i<=9;i++){ int n = i; while(n>=2 && n%2==0){ cnt++; n /= 2; }} 很平常的一种想法,就是遍历每个数,看看当前数可以被2整除几次,再累加和就好方法二:假如说我们要求9!中可以分解出2的个数第一步:1 2 3 4 5 6 7 8 9其中可以整除2的数有2原创 2021-04-12 20:17:37 · 155 阅读 · 0 评论 -
UVA1398 Meteor(几何+扫描线)
UVA1398 Meteor扫描线的裸题,但是其中的几何知识倒是挺有意思,就是判断一个射线进入目标矩阵的进入时间和离开的时间:假设源点的位置是(x,y),移动的速度是(a,b),矩阵的左下角是(0,0),右上角是(w,h)一:最朴素的思路:由几何知识可知,这条射线过(x+at,y+bt),首先有几种情况是可以排除的:1、a>0 && x>w2、a<0 && x<03、b>0 && y>h4、b<0 &a原创 2021-03-08 18:00:06 · 90 阅读 · 0 评论 -
高斯消元
Number 数论高斯消元数学上,高斯消元法(或译:高斯消去法),是线性代数规划中的一个算法,可用来为线性方程组求解。但其算法十分复杂,不常用于加减消元法,求出矩阵的秩,以及求出可逆方阵的逆矩阵。不过,如果有过百万条等式时,这个算法会十分省时。一些极大的方程组通常会用迭代法以及花式消元来解决。当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。高斯消元法可以用在电脑中来解决数千条等式及未知数。亦有一些方法特地用来解决一些有特别排列的系数的方程组。消元法是将方程组中的一方程的未知数用含有另一未知数的代原创 2021-01-23 20:40:26 · 298 阅读 · 0 评论 -
组合数学相关
Number数论组合数学相关排列问题排列数从n个不同元素种取出m(m≤n)个元素的所有不同排列的个数,叫做从n个不同元素种取出m个元素的排列数,用A(n,m)表示。排列数公式A(n,m) =n (n−1) (n−2) ⋯ (n−m+1) = n! / (n−m)!,n,m∈N+,并且m≤n(规定0!=1)推导:把n个不同的元素任选m个排序,按计数原理分步进行取第一个:有n种取法;取第二个:有(n−1)种取法;取第三个:有(n−2)种取法;……取第m个:有(n−m+1)种取法原创 2021-01-18 23:38:08 · 596 阅读 · 0 评论 -
欧几里得算法
Number 数论欧几里得算法百度百科:欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:1997 / 615 = 3 (余 152)615 / 152 = 4(余7)152 / 7 = 21(余5)7 / 5 = 1 (余2)5 / 2 = 2 (余1)2 / 1 = 2 (余0)至此原创 2021-01-18 18:39:53 · 5423 阅读 · 0 评论 -
筛法欧拉函数
Number数论欧拉函数PHI筛法欧拉函数欧拉函数在数论,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目(因此φ(1)=1)。此函数以其首名研究者欧拉命名(Euler’s totient function),它又称为Euler’s totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。 从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。链接: link....原创 2021-01-17 11:50:33 · 176 阅读 · 0 评论 -
分解质因数法
Number数论欧拉函数1.1 分解质因数法输出一个数的所有质因数,例如8 = 2 * 2 * 2;#include<iostream>using namespace std;int main(){ int n; cin >> n;//分解N cout << n << " = "; for(int i=2;i<=n;i++){//遍历小于等于n的所有数 while(i!=n){ if(n%i==0){ n /= i原创 2021-01-17 11:30:03 · 425 阅读 · 0 评论