数论初步
古河渚Nagisa
雪中智代雨中杏,樱下古河花田汐。
香醇宫泽黑琴美,天际芽衣黄昏琼
展开
-
P1025 数的划分
/* 题型:递归,排列组合 定义:把一个数N分解为K份,他的方案数把N-i(1<=i<=M/K)分成k-1份的方案数(之和)相等 注意:g要定义在函数开头,边界条件注意 */ #include using namespace std; int dfs(int sum,int step,int now) { int g=0; if(step==1) return g=1;//边界转载 2017-08-29 15:26:59 · 233 阅读 · 0 评论 -
P1115 最大子段和
/* 题型:子段和,滚动数组 注意:别忘了%2 如果(sum<0) sum=0; */ #include #include #include #include using namespace std; int sum,a[2],n; int main() { scanf("%d",&n); scanf("%d",&a[1]); sum=a[1]; for(in原创 2017-08-29 15:20:51 · 155 阅读 · 0 评论 -
P1908 逆序对
/* 题型:树状数组 注意:背诵格式,当前树状数组的数目 */ #include #include using namespace std; int n,a[50001],p[50001],tree[100001],ans; //这里是树状数组模板部分,务必背诵 inline void add(int i,int x){//树状数组添加数 while(i<=n){ t转载 2017-08-27 20:18:39 · 235 阅读 · 0 评论 -
最大公约数和最小公倍数问题
//最小公倍数=两整数的乘积÷最大公约数 #include using namespace std; int ans=0; int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b); } int main(){ int x1,y1; cin>>x1>>y1; for(int i=2;i<=1100;原创 2017-08-27 14:57:07 · 148 阅读 · 0 评论 -
P1010 幂次方
#include #include using namespace std; void cg(int n){ if(n==0){//前面五种特判 return ; } if(n==1){ cout<<"2(0)";return ; } if(n==2){ cout<<2;return ; } i转载 2017-08-26 20:20:08 · 150 阅读 · 0 评论 -
快速幂
#include #include #include using namespace std; long long b,p,k,ans; long long qpow(long long n,long long x,long long mod) { if(x==0) return 1;//递归出口:0次方为1 long long res=qpow(n*n%mod,x/2,mod);转载 2017-08-26 20:18:40 · 110 阅读 · 0 评论 -
最长子序列问题
引子:洛谷p1020,导弹拦截 【问题描述】某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于50000的正整数),(1)计算这套系原创 2017-08-30 16:39:47 · 295 阅读 · 0 评论 -
简单数论总结
一.最长子序列问题,见http://blog.csdn.net/qq_37416823/article/details/77718585二·放苹果问题 【问题描述】将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序)。 例如:n=7,k=3,下面三种分法被认为是相同的。 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法。 【分析】根据排列组合公式得,将整数n分成原创 2017-08-31 11:02:36 · 172 阅读 · 0 评论 -
P1017 进制转换
【题目描述】 进制转换 【题目分析】 此题就是一道很裸的数学题,只是对于取余小于零的情况多加注意即可 【代码】#include<bits/stdc++.h> using namespace std; int m,numten,n; void change(int a){ int k; k=a%m; a=a/m; if(k<0){ k-=m;转载 2017-10-04 15:43:20 · 284 阅读 · 0 评论