
数论
LYoGa
这个作者很懒,什么都没留下…
展开
-
UVA575 Skew Binary
大水题。。。。#include#include#include#include#includeusing namespace std;int main(){ int arr[40]; char s[40]; while (gets(s)){ if (strcmp(s, "0") == 0) break; int l = strlen(s), sum =原创 2013-07-21 09:49:13 · 632 阅读 · 0 评论 -
UVA571- Jugs
题意:两个水壶,分别给出两只水壶的容量和所要huo de原创 2014-05-06 21:23:08 · 581 阅读 · 0 评论 -
UVA10717- Mint
思路:枚举四个数的最小gong bei shu原创 2014-05-06 21:15:29 · 587 阅读 · 0 评论 -
UVA11388-GCD LCM
题目链接题意:给你两个数G和L,输出两个正整数,最大公约数为G,最小公倍数为L,输出a最小的情况,如果不存在输出-1。思路:当a最小时,a = G,所以只要L % G == 0,就表示存在。代码:#include #include #include #include using namespace std;int g, l;int main原创 2014-09-06 17:00:47 · 738 阅读 · 0 评论 -
HDU4944-FSF’s game(递推)
题目链接题意:给定一个整数n,求∑f(i, j)(1 思路:依题意,我们可以得到一个递推式ans[n] = ans[n - 1] + ∑f(n, j)(1 对于∑f(n, j)而言,我们用aj(1 <= j <= n)表示gcd(n/k, j/k)所能取到的值的集合,那么可以得到∑f(n, j) = (n * 1 / a1 + n * 2 / a2 + ... +原创 2014-08-12 21:23:22 · 984 阅读 · 0 评论 -
HDU4952-Number Transformation
题目链接原创 2014-08-14 19:40:35 · 698 阅读 · 0 评论 -
UVA10006- Carmichael Numbers
#include #include #include #include typedef long long LL;const int N = 65005;int n, m, cnt;int prime[N];void P() { m = sqrt(N + 0.5); for (int i = 2; i < m; i++) if (!prime原创 2014-05-03 21:30:49 · 540 阅读 · 0 评论 -
UVA10780 - Again Prime? No Time.(分解质因子)
题目链接题意:输入两个整数n和m,求最大的整数k使得m^k是n!的约数。思路:m^k等于m的所有质因子的k次方的和,所以只要找到m中的质因子在n!中所能得到的最小的次方,就是k的值。代码:#include #include #include #include #include using namespace std;const int INF原创 2014-09-12 15:39:51 · 1128 阅读 · 0 评论 -
UVA11752-The Super Powers(素数表+log)
题目链接题意:如果有一个数至少是两个不同的正整数的幂,那么称它为超级幂。按照升序输出1~2^64-1之间的所有超级幂。思路:n = a ^ i = b ^ j,那么就证明指数要为合数,所以只要找出64以内的所以合数,然后枚举在1 代码;#include #include #include #include #include using names原创 2014-09-13 10:35:12 · 1229 阅读 · 0 评论 -
HDU5011-Game(博弈)
题目链接题意:取石子游戏,两个人轮流取石子,取石子有规则,要么那掉这堆石子,要么将这堆石子分成两堆,在加入原来的石堆当中,先手取完算胜利,否则失败。思路:简单的Nim游戏,所有值异或为0时,先手失败。代码:#include #include #include #include #include using namespace std;cons原创 2014-09-15 00:12:17 · 1420 阅读 · 0 评论 -
UVA11489 - Integer Game(博弈)
题目链接题意:有一连串的数字,两个人轮流取一个数,当谁取走数后,剩下的数的和不能被3整除,则这个人输了,求出先手是否能胜。思路:当数只有一个时,先后必胜。当数大于两个时,先判断先手取完数后,剩下的数是否能被3整除,如果可以的话,接下去两个人轮流取的数都必须是3的整数倍。计算3的整数倍的个数就可以了。代码:#include #include #includ原创 2014-09-15 16:38:24 · 1148 阅读 · 0 评论 -
UVA1315 - Crazy tea party(推导)
题目链接题意:n个人坐成环形,相邻的两个可以交换位置,求最少交换次数使得序列相反。思路:类似与冒泡排序,可以将环形序列拆成两个序列,分别进行冒泡。当n为奇数时,分为n/2与n/2 + 1,所以ans = (n / 2) * (n / 2 - 1) / 2 + (n / 2) * (n / 2 + 1) / 2,当n为偶数时,分为两个n/2, 所以ans = (n / 2原创 2014-09-15 19:26:00 · 951 阅读 · 0 评论 -
10079 - Pizza Cutting
点击打开链接题意:用n刀可以切出最多块的Pizza。思路:线段相交越多,所分成的区域越多。每多一刀,就让这刀与之前的全部相交,即为最大值。最后有公式的:n * (n + 1) / 2 + 1代码:#include #include #include #include #include using namespace std;typedef l原创 2014-09-17 11:07:29 · 1391 阅读 · 0 评论 -
UVA128- Software CRC
题意:给一个字符串,每个字符占一个字节(即256进制数),在后面加两个字节,使得其模34943余数为0 思路:将原创 2014-05-05 23:47:51 · 652 阅读 · 0 评论 -
UVA106- Fermat vs. Pythagoras(素勾股数)
给你一个n,让你找出一些勾股数组,a^2+b^2=c^2 , 需要满足a<b<c<=n 。 对于每个case题目首先需要你输出这些勾股数组中PPT的个数,然后再输出一个数字,这个数字是n-所有勾股数组用掉的数字个数原创 2014-05-04 21:12:21 · 1876 阅读 · 0 评论 -
UVA10110
思路:只有当输入的数位完全开平方数才能使灯开着,因为只有完全开平方数的因子是奇数个#include#includeint main(){ long long n, m; while (scanf("%lld", &n) && n){ m = (int)sqrt(n); if(m * m == n) printf("yes\n"); else p原创 2013-08-12 21:10:16 · 655 阅读 · 0 评论 -
UVA10392
题意:输出所给数所有的素数因子思路:所有数都可以由素数相乘而得到,所以只要一直对一个数求余,直到余数为0,就证明所要分解的数中再无这个素数。 例如:4 = 2 * 2, 6 = 2 * 3, 8 = 2 * 2 * 2,所有的数都可以由素数相乘而得。#includeint main(){ long long n; while (scanf("%ll原创 2013-08-12 21:30:38 · 678 阅读 · 0 评论 -
UVA10879
水题。。。只要输出两对因子即可#includeint main(){ int n, m, t = 0; scanf("%d", &n); while (n--){ int cnt = 0, flag = 0; scanf("%d", &m); for(int i = 2; i * i < m; i++){ if (flag == 0){ printf(原创 2013-08-12 21:31:47 · 659 阅读 · 0 评论 -
UVA575
大水题。。。。#include#include#include#include#includeusing namespace std;int main(){ int arr[40]; char s[40]; while (gets(s)){ if (strcmp(s, "0") == 0) break; int l = strlen(s), sum =原创 2013-08-12 21:07:39 · 621 阅读 · 0 评论 -
UVA568
思路:一边乘一边消0#includeint main(){ int n; while (scanf("%d", &n) != EOF){ int m = 1; for(int i = 2; i <= n; i++){ m *= i; while (m % 10 == 0){ m /= 10; } m %= 100000; }原创 2013-08-12 21:15:05 · 657 阅读 · 0 评论 -
UVA408
思路:直接判断循环的数量num是否与mod相等#include#includeint vis[100005];int main(){ int step, mod, seed, num, flag; while (scanf("%d %d", &step, &mod) != EOF){ num = seed = 0,flag = 1; memset(vis, 0, siz原创 2013-08-12 21:22:53 · 705 阅读 · 0 评论 -
UVA350
#include#includeint vis[10005];int main(){ int Z, I, M, L, t = 0; while(scanf("%d%d%d%d", &Z, &I, &M, &L) && Z && I && M && L){ memset(vis, 0, sizeof(vis)); int cnt = 0, k; while (1){原创 2013-08-12 21:24:22 · 969 阅读 · 0 评论 -
UVA550
#includeint main(){ int base, n, m, cnt, end, i; while (scanf("%d%d%d", &base, &n, &m) != EOF){ cnt = 1, i = n * m; while (1){ cnt ++; i = i % base * m + i / base; if (i == n)原创 2013-08-12 21:13:13 · 695 阅读 · 0 评论 -
UVA11121- Base -2
题目就是要求-2进制。原创 2014-05-03 21:36:41 · 511 阅读 · 0 评论 -
UVA138- Street Numbers
题目实际就是给你两个数m、n,使得m、n之间的数之和与1~m之间的数之和相等(不包括m)。即:1+2+...+m-1 == (m+1)+...+n; 因此我们可以套用求和公式,两边移项化简得:2*pow(m,2) = n*(n+1)。因此我们可以得到:m = sqrt(n*(n+1)/2)。枚举n的值,从而判断所得到的m值是否为整数,若为整数则说明两边的值实际相等。得到输出满足条件的最小的原创 2014-05-03 21:25:21 · 590 阅读 · 0 评论 -
UVA10673 - Play with Floor and Ceil
题意:找到p,q符合式子的成立思路:分别向上取整和向下取整,然后使用扩展欧几里德算法#include #include #include #include using namespace std;int x, y, d;void gcd(int a, int b, int &d, int &x, int &y) { if (!b) { d =原创 2014-05-03 21:34:18 · 579 阅读 · 0 评论 -
UVA10791- Minimum Sum LCM
首先假设我们知道了一系列数字a1,a2,a3……an,他们的LCM是n,那么什么时候他们是最优解呢,当他们两两互质的时候a和b的LCM是n,GCD是m,那么n=a/m*b , 它们的和就是sum=a+b;如果m不为1(即a和b不互质),那么我们为什么不优化一下,将a变为a=a/m呢?,改变后a和b的LCM依然是n,但是他们的和显然减少了所以我们得到最重要的一个性质,要想a1,a2,原创 2014-05-03 21:41:46 · 583 阅读 · 0 评论 -
UVA10312- Expression Bracketing(Catalan + 递推)
题目链接题意:给出一个序列,长度为n,表示有n个x(节点),可以添加任意括号,问说形成的串为非二叉表达式的有多少个。思路:用总数减去二叉表达式的数量。二叉表达式可以用Catalan数求解,至于总数的话,用dp求解。dp[i][0]表示在第i个位置可以被拆分成两个子树,dp[i][1]表示有一个子树。代码:#include #include #includ原创 2014-09-18 10:59:51 · 997 阅读 · 0 评论