![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论+组合数学
文章平均质量分 56
clevermike
这个作者很懒,什么都没留下…
展开
-
UVa 10236 - The Fibonacci Primes(斐波那契素数)
斐波那契素数定理:斐波那契数列中,若i为素数(i>5),则fib(i)为素数筛出22000个素数,得需要遍历到250000,本题要求保留前10位,用double存储斐波那契数列即可附:#include #include #include bool isprime[250010];int prime[25010];long double fib[250010];int原创 2012-11-13 10:33:14 · 1323 阅读 · 0 评论 -
HDU 4394 - Digital Square(BFS+乘法原理)
不怎么难的一道题,还是各种挫烂臭,数组开小,没有跑到9,没有记录长度,没有更新最小值,总之是各种恶心不多说了,面壁去。。。#include #include #define LL long longtypedef struct{ LL num; int len;} digit;LL ans,n;LL p[18];int len;bool f;digit原创 2013-08-13 09:03:05 · 1199 阅读 · 0 评论 -
HDU 4577 - X-Boxes(杭州邀请赛B题)(JAVA大数+规律)
首先,第一位最多可放置(n/(2^(k-1)+1)/2个(第奇数个肯定全都能放到),因为奇数不含因子2然后再看多余部分,可以放置1,3,5,7乘以他们的2^(jk)(j=1,2,3,4,...),这个跑一个循环就出来了两部分加和,即为答案这题一开始卡超时,后来发现把2^k写到循环里面了,改到循环外面存一下就AC了组队赛的第一个JAVA题import java.util.Scan原创 2013-08-10 18:58:12 · 1320 阅读 · 0 评论 -
HDU 4671 - Partition(2013MUTC5-1009)(整数拆分,五边形数定理)
还是数学知识匮乏,要这个五边形数定理以后得补充这类知识啊#include #define LL long longLL p[100005];int T,n,t;int main(){ p[0]=1; p[1]=1; p[2]=2; for(int i=3; i<=100000; i++) { for(int j=1原创 2013-08-06 19:35:53 · 1133 阅读 · 0 评论 -
UVa 10692 - Huge Mods(指数循环节)
关于指数循环节的公式以及证明:http://hi.baidu.com/aekdycoin/item/e493adc9a7c0870bad092fd9#include #include #include #define LL long longLL a[20];LL euler(LL n){ LL m=(LL)sqrt(n+0.5); LL ans=n;原创 2013-08-06 09:59:06 · 1400 阅读 · 0 评论 -
HDU 3903 - Trigonometric Function
这个题做了有近一个小时的时间,先后出现了思路错误、越界等一些情况,各种处理之后终于AC了先从公式入手——cos(nA+mB)=cos(nA)cos(mB)-sin(nA)sin(mB)而根据倍角公式,任意n倍的sin(nA)、cos(nA)、tan(nA)都可以化成sin(A)、cos(A)、tan(A)的多项式的形式根据余弦公式,cos(A)=(b*b+c*c-a*a)/(2*b原创 2013-08-05 16:34:27 · 988 阅读 · 0 评论 -
UVa 11027 - Palindromic Permutation(排列编码)
题意:给出一个串,问你第k个回文排列是什么从最高位开始往下找,从最小的字母开始,算出第i位为这个字母的个数(组合方法),直至这些个数加起来都等于k#include #include #include using namespace std;#define LL long longchar s[50],A[50],ans[50],mid;LL ct[50],x;int n,l;原创 2013-07-28 11:30:30 · 767 阅读 · 0 评论 -
SGU 159 - Self-Replicating Numbers
题意:给你一个b和一个n,求在b禁止下的n位数的平方的后n位与其本身相等的所有解做这个题的时候一开始就尝试了推导一下这个题的规律,发现这个题的解很稀疏,完全可以搜索,然后我通过二项式对其每位进行展开,为了存储处理后的每位数字,我在每个递归栈里面加了一个数组,这样导致了爆栈,开到全局变量后,结果就出现错误了。然后纠结了半天,查过题解才发现,每位只需要判断前面那些位的数,然后存一个下一位的进位就可原创 2013-07-28 08:23:22 · 971 阅读 · 0 评论 -
SGU 126 - Boxes
非常好的一个题,一开始打算纯暴,结果发现出现了好多循环,后来发现了这个游戏其中的内涵还是以前的逆推思想,终态是(2*x,0),那么上一步一定是(x,x),再上一步是(3/2x,1/2x),再上一步有两种情况(就不一一举出了),再上一步还有两种情况...最终可推得A,B只有满足(A+B)/GCD(A,B)==2^k时才会成立,k即为移动次数#include #include #def原创 2013-07-30 09:21:18 · 917 阅读 · 0 评论 -
HDU 4279 - Number
2012年天津赛区网赛的题目,想了好久,也没能想出来还是小杰思路敏捷,给我讲解了一番,才让我把这个题做出来f(x)=x-phi(x)(1——x与x互素个数)-g(x)(x的因子个数)+1其中g(x)为multiply(q(i)+1),x=multiply(p(i)^q(i))(p(i)为所有素因子)打表可得,phi(x)只有x=2时为奇数,其余全为偶数,而f(2)=0,可以不予考虑原创 2013-08-03 15:21:35 · 872 阅读 · 0 评论 -
URAL 1055 - Combinations(快速筛素因子个数)
数据量不超过50000,先筛出50000以内的素数(约5200个),然后在log时间内筛出每个素因子的个数,总复杂度O(nlogn)#include #include #include bool isprime[50010];int prime[5200],p;int ct[5200];int init(){ p=0; memset(isprime,0,sizeo原创 2013-08-01 10:59:29 · 1152 阅读 · 0 评论 -
UVa 10943 - How do you add?
很简单的计数问题,推出状态转移方程即可。用d(i,j)表示i拆成j个数和的种类数d(i,j)=d(i-1,j)+d(i,j-1)边界:d(i,1)=1#include #include #define mod 1000000int main(){ int p[110][110],n,k; memset(p,0,sizeof(p)); for(原创 2013-07-24 19:47:05 · 736 阅读 · 0 评论 -
UVa 10940 - Throwing cards away II(数论,规律)
这个题可以按逆序思路来想最后剩下的牌,除了1张之外,最后一张剩下的一定是偶数牌然后,2^n张牌剩下的一定是2^n2^n-1张牌剩下的一定是2^n-2...以此,可推得以下数列:ans(1)=1;ans(2)=2;ans(3...4)={2,4};ans(5...8)={2,4,6,8};...ans(2^(n-1)+1...2^n)={2,...,2^n原创 2013-07-24 19:29:45 · 924 阅读 · 0 评论 -
UVa 10229 - Modular Fibonacci(数论,规律)
DC翻出以前做的好多题,其中这个题让DC纠结了一段时间,因为乍眼一看没有任何思路,看代码也没什么想法,然后在纸上算了算,突然想起以前的计算过程,然后豁然开朗DC总结的规律:fib数列对2^m取模的循环节为3*(2^(m-1))#include using namespace std;int fib[22][2000000];int main(){ int m,n;原创 2013-07-24 19:03:15 · 1031 阅读 · 0 评论 -
UVa 557 - Burger
做了这个题之后我才发现,对数是个极其好的东西一开始我直接用公式暴力的,但是超出了浮点数范围,后来改成对数,但是超时了,我也很纠结,后来发现可以打表,然后打了表就过了#include #include double L[100005];int main(){ int n; double k; L[0]=0; for(double i=1;i<=10原创 2013-07-29 15:00:08 · 1413 阅读 · 1 评论 -
UVa 106 && POJ 1305 - Fermat vs. Pythagoras(毕达哥拉斯三元组)
增加两个变量m,n;令x=m^2-n^2; y=2*m*n; z=m^2+n^2;(m、n奇偶性不同)对m、n进行枚举即可,注意控制上限,以免超时#include #include #include using namespace std;int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}原创 2012-11-13 10:44:39 · 775 阅读 · 0 评论 -
UVa 10392 - Factoring Large Numbers
分解质因数,题目中说素数最大不超过1000000,从2枚举到1000000即可注意:输出空格和空行#include #include using namespace std;int main(){ long long a,i,j,t,flag; while(cin>>a&&a!=-1) { for(i=2; i<=100000原创 2012-08-24 10:40:50 · 863 阅读 · 0 评论 -
UVa 10042 && POJ 1142 - Smith Numbers
做了个非搜索题,smith数,又是由于忽略条件导致一直卡题,题目中说smith数是非素数,所以要单独判断,smith数比较密集,暴力枚举即可此处只给出poj的代码,两者输入略有差别,uva的就不再给出#include #include using namespace std;bool isprime[10005];int prime[1500];int factor[原创 2012-08-21 10:29:38 · 1189 阅读 · 0 评论 -
HDU 4372 - Count the Buildings(组合计数)
首先想过n^3的组合方法,即f(i,j,k)=f(i-1,j,k)*(i-2)+f(i-1,j-1,k)+f(i-1,j,k-1),肯定搞不定然后想了好久没有效果,就去逛大神博客了,结果发现需要用到第一类stirling数第一类stirling数S(n,m)表示的是n个数排成m个非空环排列的数目每个环排列中必然有一个是可以看见的,然后再对这m个环求组合数不难理解,但是很难想到#原创 2013-08-15 11:53:07 · 1037 阅读 · 0 评论