![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
algorithm(数论)
文章平均质量分 58
famousDT
掌握C/C
展开
-
SOJ-4075(n个数异或第k大的数)
/****************************************************************************************************** ** Copyright (C) 2011.07.01-2013.0原创 2011-10-03 15:34:44 · 989 阅读 · 0 评论 -
POJ-2084(Catalan数专题)(Game of Connections )
首先给出Catalan数的计算公式Catalan=C(2*n,n)/(n + 1)。【解题思路】这道题目是典型的凸多边形划分问题,直接套用公式即可。SOJ-2114(栈):典型的出栈顺序问题。SOJ-2404(The midterm exam of algorithm):典型的二叉树个数问题。SOJ-1247(球迷购票问题):【题目描述】球赛门票的售票处规定每位购票者限购一原创 2012-03-21 15:02:31 · 899 阅读 · 0 评论 -
POJ-3219(二项式系数奇偶性的判定准则)
(n,k)(k<=n)的奇偶性取决于(n-k)与k的二进制表达式是否存在同一位上的两个数码均为1,若存在,则为偶数,反之为奇数#includeint n,k;int main(){ while(scanf("%d%d", &n, &k)!=EOF){ printf("%d\n", k&(n-k)?0:1); } return 0;}参考资料:【数学通讯(200原创 2012-04-10 17:48:22 · 1456 阅读 · 0 评论 -
POJ-3244(数学推论)(Difference between Triplets )
//数学好题//定义两个三元组I(xi,yi,zi)和J(xj,yj,zj),(可以看做是空间中的点)//他们的距离为D(I,J)=max{xi-xj,yi-yj,zi-zj}-min{xi-xj,yi-yj,zi-zj},//给定n个三元组(n<=200000),求任意两个三元组的差的和//抽化出来的模型是 max(a,b,c)-min(a,b,c),这个东西吧他放在数轴上 a,b,c原创 2012-04-10 18:03:47 · 1092 阅读 · 0 评论 -
POJ-1906(二进制思想)
【题目描述】给出1, 3, 9, 27, 81……问第n个集合,集合按照和从小到大排列。【解题思路】二进制原创 2012-04-11 13:09:26 · 587 阅读 · 0 评论 -
POJ-2142(扩展欧几里德+同余方程)(The Balance )
方法一:/*==========================================================*\| [扩展眼欧几里德]给定 a b d找到满足ax+by=d 的令|x|+|y|最小| 参考线性同余方程 g=gcd(a,b) , ax0+by0=gcd(a,b)| 程的一组解: x=x0*d/g; y=y0*d/g; | 方程的全部解:x..=x+原创 2012-04-13 10:02:19 · 1609 阅读 · 1 评论 -
POJ-2402(Palindrome Numbers)
【题目描述】求第n个回文数【解题思路】首先求出一共k位长的数一共多少个回文,然后对半开/* list[i]表示位数为i的满足回文数要求共有list[i]个 */ll List[20] = {0, 9, 9, 90, 90, 900, 900, 9000, 9000, 90000, 90000, 900000, 900000, 9000000, 9000000, 90000000,原创 2012-04-18 10:50:58 · 877 阅读 · 0 评论 -
POJ-2292(求约数个数)(Divisors)
【题目描述】Your task in this problem is to determine the number of divisors of C(n,k).【解题思路】1.约数个数定理:设n的标准质因数分解为n=p1^a1*p2^a2*...*pm^am,则n的因数个数=(a1+1)*(a2+1)*...*(am+1).2.n!的素因子 = (n-1)!的素因子 + n的原创 2012-05-01 17:28:10 · 922 阅读 · 0 评论 -
POJ-2480(欧拉函数的运用)(Longge's problem )
【题目描述】意思就是求sigma(gcd(i,n)),其中1【解题思路】ll d[500005];int main(){ ll i, j, index = 0; for (i = 0; i < 100000; ++i) { if (isPrime(i)) { d[index++] = i; } } ll n; while (scanf("%lld",原创 2012-04-18 12:46:57 · 740 阅读 · 0 评论 -
POJ-4043(简单数论)(Remoteland)
【转载自】http://blog.ac521.org/?p=126【题目描述】找一个数D,是一个平方数,且他是由【解题思路】筛出所有素数, 然后求n!中每一个素数出现多少次,出现偶数次的必然是D的因子。出现奇数次的,减去一个即可,因为是该素数必定小于等于n,所以n!中必有一个数与该素数相等,去掉这一个不影响其他的,等下的还是D的因子。但是,筛素数+快速幂...TLE了。我们转载 2012-04-18 14:05:53 · 1143 阅读 · 0 评论 -
POJ-2710(47/159的七进制表示)(Consecutive Digits)
int main(){ int cases, x = 1; cin>>cases; while (cases--) { int a, b, c, d; cin>>a>>b>>c>>d; printf("Problem set %d: %d / %d, base 7 digits %d through %d: ", x++, a, b, c, d); int i; a %原创 2012-04-06 10:51:56 · 1078 阅读 · 0 评论 -
POJ-3372(数论,完全剩余系)(Candy Distribution)
【题目描述】N个小孩围成一个圈,老师 顺时针隔 0, 1, 2, 3,。。。个小孩发糖,问每个小孩是否都能领到糖。【解题思路】解法很简单 当N是2^K时输出YES,否则输出NO。int main(){ int n; while (scanf("%d", &n) == 1) { if (n & (n - 1)) printf("NO\n"); else printf原创 2012-04-05 13:35:37 · 835 阅读 · 0 评论 -
POJ-1072(平衡三进制)(Eva's Balance )
将n用-1,0,1表示,如20=1*3^3+(-1)*3^2+1*3^1+(-1)*3^0所以20+3^0+3^2=3^1+3^3即1,9 3,27平衡三进制具体转化方法先转化为用0,1,2表示的3进制,然后通过“借位”转换若对应的系数为2,则变为-1,下一位+1若对应的系数为3,则变为0,下一位+1为0或1时不变原理即是如果第i位为1,可以用砝码抵消,如果是2原创 2012-03-31 16:20:17 · 1382 阅读 · 0 评论 -
POJ-1150(求排列数P(n,m)中最后一个非0的数字)
1 如何求出n阶乘中质因数x(比如说5)出现的次数?int get(int m, int n)//计算n!中质因子m的出现次数{ if (n == 0) return 0; return (n / m) + get(m, n / m);} 2 如何求出n!阶乘最后非0位?比如说我们要找10!最后非0位,由于质因数2和5组合之后会使得末尾产生0.那么我们不妨把原创 2011-12-12 15:22:09 · 666 阅读 · 0 评论 -
POJ-3604(数论题目,推公式)
这题的大意就是 给出一个数n, 找到它所有的因子, 然后把这些(因子的因子数)的立方和求出来。题目的时限虽然很宽,但是数据很BT。首先,公式必须找出来。证明如下:先将n质因数分解成形如n = a ^m * b ^ p * c ^q *........;那么要求的结果为函数g(x)的值;我们以n有2个质因数为例子;g(n) = g(a ^m * b原创 2012-02-22 23:46:23 · 638 阅读 · 0 评论 -
POJ-1432(n!的位数-数论)
问题描述:输入一个整数n(1,10^7),要你输出该整数的阶乘后的位数是多少?问题分析:由于n的输入数可能较大,倘若按照常规算法(就是算出n的阶乘)设计的话,一方面会出现TLE,另一方面会出现数据溢出的情况。所以我们不得不充分利用数学知识里面的对数与指数间的亲密关系。推导以下公式:n!=n*(n-1)*(n-2)*…..*1 n的位数=[lg(n)]+1;所以:n!的位数=[lg(原创 2012-02-27 23:35:56 · 700 阅读 · 0 评论 -
POJ-1674(n的一个全排列中要变成顺序需要几次交换)
题意:给一个由1-n的整数组成的数列。对其进行交换两个数的操作。请问最少需要多少次操作,使得数列变成升序的1-n思路:举个例子来说,2 5 4 3 1。我们让 i 从1开始判断是否在i是否在该在的位置上。此时i=1不在位置1上,而且位置1上是2。2应该放在位置2上,而位置2上是5。位置5上是1。这就说明1,2,5三个数轮换一下,就能将这三个数换到各自应该在的位置。需要换2次。顺着这个思原创 2012-02-28 13:35:12 · 2746 阅读 · 0 评论 -
POJ-3720(分数的小数表示,只要循环节)(Occurrence of Digits)
int main(){ int i, j; int d[105][15] = {0}; for (i = 2; i <= 100; ++i) { int ans = 1; int visit[105] = {0}; visit[ans] = 1;//重点 while (1) { int t = ans * 10 / i; d[i][t]++; ans =原创 2012-03-26 17:15:13 · 778 阅读 · 0 评论 -
POJ-1305(勾股定理)(Fermat vs. Pythagoras)
这个题目就是找在1~N之间互质的三个正整数x、y、z,并满足x^2+y^2=z^2,判断这样的数有多少对,以及跟1~N中与这些互质正整数无关的正整数的个数。其实比较关键的是对上面那个式子 x^2+y^2=z^2 进行变形,减少一个变量为(r^2-s^2)^2 + (2*r*s)^2 = (r^2+s^2)^2,这样只有两个变量存在,可以减少一轮循环。于是题目就变成了找这样的r和s,当r原创 2012-03-29 13:04:11 · 591 阅读 · 0 评论 -
SOJ-2704(组合数取余C(n, m))
【题目描述】求C(n, m) % k 是否等于0,如果等于0,输出“Yes”,否则输出“No”。【题目分析】首先找出k中各个素数约数的个数,这里用简易素数的筛法: for (i = 2; i * i <= c; ++i) { if (c % i == 0) { wo[index].x = i; wo[index].num1 = wo[index].num2 = 0;原创 2012-03-13 19:42:59 · 718 阅读 · 0 评论 -
POJ-1730(pow精度wa到吐血)(Perfect Pth Powers)
int main(){ double n; int i; while (scanf("%lf", &n) == 1 && n) { int tag = 0; if (n < 0) { tag = 1; n = -n; } if (n == 1) {原创 2012-03-31 16:57:33 · 615 阅读 · 0 评论 -
【*】POJ-3899(数论很难)(Lucky Numbers——统计)
转载自:http://hi.baidu.com/billdu/item/c6dda7310196a9f6a8842830代码如下:char A[50], B[50];/* 求[1, upper]中后last_length位是last的Lucky Number总数 */ll stat_n(char *upper, char* last, int last_length){ ll re转载 2012-05-13 11:18:26 · 863 阅读 · 0 评论