数论
小白菜又菜
这个作者很懒,什么都没留下…
展开
-
Leetcode 204. Count Primes
【代码】Leetcode 204. Count Primes。原创 2023-01-31 10:42:14 · 181 阅读 · 0 评论 -
Leetcode 858. Mirror Reflection
Leetcode 858. Mirror Reflection原创 2022-08-08 21:57:58 · 126 阅读 · 0 评论 -
UVa 412 - Pi
题目:给你一种圆周率pi的近似求法,所及给出一组数,里面数对互质的概率p = 6/(p1*pi)。分析:简单题、数论。直接利用辗转相除求解即可。如果p为0则不能用来计算(分母是0)。#include #include #include int number[51];int gcd( int a, int b ){ return a%b?gcd( b, a%b ):b;原创 2013-10-30 18:03:40 · 1074 阅读 · 0 评论 -
UVa 10323 - Factorial! You Must be Kidding!!!
题目:计算阶乘在10000~6227020800之间的值,不在范围对应输出Under或者Over。分析:简单题、数论。因为13!=6227020800,7!注意:负数情况,奇数输出Overflow,偶数输出Underflow。#include #include #include int main(){ int n; while ( ~scanf("%d",&n) )原创 2013-10-30 17:43:12 · 1472 阅读 · 0 评论 -
UVa 686 - Goldbach's Conjecture (II)
题目:给定一个数字n问可以找出多少对素数,a,b使得a+b = n。分析:简单题、数论。首先计算素数,然后利用循环枚举素数加和,使得和值+1即可。#include #include using namespace std;int visit[32768];int prime[32768];int calcu[32768];int main(){ //打标计算327原创 2013-10-30 00:04:38 · 1505 阅读 · 0 评论 -
UVa 568 - Just the Facts
题目:计算10000以内的数字的阶乘的最后的非零位。分析:简单题、数论、dp。通过地推,每次存储前一个数的最后6位,计算下一个数字即可。 (以为10000以内5^5 = 3125最多可以影响后5位)#include #include #include using namespace std;long long last[10005];int m原创 2013-10-29 15:26:23 · 1200 阅读 · 0 评论 -
UVa 583 - Prime Factors
题目:给你一个数字n,将它因式分解。分析:简单题、数论。因为数据范围是-2^31 ~ 2^31所以n的素数因子在区间[sqrt(n),n]上最多有1个; 所以计算[0,sqrt(n)]上的所有素数因子,除n剩下的部分不是1,就是那个最大的质因数了。#include #include #include using namespace std;int原创 2013-10-29 14:49:48 · 1336 阅读 · 0 评论 -
UVa 294 - Divisors
题目:计算一个给定区间中因数最多的数。分析:数论、组合数学。题目的数据的比较大,如果暴力一定会超时,那么就考虑利用其他方法求解。 我们将给定数字因式分解,那么因数的个数就是π(各质因子数+1)。(每个质因子取0~上限个) 因为数据时在10^9之内,所以质因数只能是33333以内的素数,利用筛法将素数打表计算即可。#include #原创 2013-10-28 15:55:32 · 3490 阅读 · 0 评论 -
UVa 10924 - Prime Words
题目:给出一个单词,a代表1,z代表26,A代表27,Z代表52,判断所有字母之和是不是素数。分析:简单题。首先利用筛法打表计算出前1040中的素数,然后计算判断即可。注意:本题中1是素数。#include #include #include using namespace std;int prime[1045];int value( char c ){ if原创 2013-10-27 13:31:40 · 1354 阅读 · 0 评论 -
UVa 11417 - GCD
题目:gcd求和。分析:简单题、数论。打表输出即可。#include #include #include int gcd( int a, int b ){ return a%b?gcd(b,a%b):b;}int F[510]; int main(){ int sum = 0; for ( int i = 1 ; i <= 500 ; ++ i ) { fo原创 2012-12-21 16:17:00 · 1346 阅读 · 0 评论 -
UVa 530 - Binomial Showdown
题目:求组合数C(n,k)。分析:数论。这题目是简单题么,╮(╯▽╰)╭,尝试了各种方法不是TLE就是RE,结果用最原始的方法,用GCD除一下就过了。注意:数据类型,int和long就TLE了,全改成long就AC了。#include #include #include long gcd( long a, long b ){ return !b?a:gcd( b, a%原创 2013-10-15 21:40:03 · 1351 阅读 · 0 评论 -
UVa 543 - Goldbach's Conjecture
题目:歌德巴赫猜想,给出一个数字给出两个奇素数使得和为这个数字。分析:简单题、数论。首先打表求出1000000以内的素数,然后枚举即可。#include #include #include int used[ 1000005 ];int prim[ 1000005 ];int main(){ int n,count = 0; memset( used, 0, sizeo原创 2012-11-25 12:07:09 · 1175 阅读 · 0 评论 -
UVa 10591 - Happy Number
题目:求一个数每个数位上数字的平方和,为最后是否能转换化1。分析:简单题、数论。求循环节。因为9^9*9 #include #include #include int used[ 1000 ];int bitsv( int v ){ int sum = 0; while ( v ) { sum += (v%10)*(v%10); v /= 10; } retu原创 2012-11-25 12:25:45 · 1034 阅读 · 0 评论 -
UVa 11388 - GCD LCM
题目:给出gcd(a,b)和lcm(a,b),求a,b使得最小。分析:简单题、数论。如果lcm%gcd != 0则不存在,否则a=gcd,b=lcm。#include #include #include int main(){ int n,G,L; while ( scanf("%d",&n) != EOF ) for ( int t = 1 ; t <= n ; +原创 2012-12-21 20:48:02 · 1710 阅读 · 0 评论 -
UVa 10006 - Carmichael Numbers
题目:判断一个数是不是Carmichael number。分析:数论。利用素数的随进判定算法,可以通过判定并且不是素数的数称为Carmichael number。 首先,利用筛法对素数进行打表。 然后,利用费马小定理枚举所有的a进行判断。#include #include #include using namespace st原创 2013-10-31 19:25:15 · 2603 阅读 · 0 评论 -
UVa 10235 - Simply Emirp
题目:判断一个数和翻转是不是素数。分析:简单题、数论。首先打表计算1000000内的素有素数,然后判断即可。注意:翻转后的数字如果是原来的数字就不算emirp。#include #include using namespace std;int prime[1000000];long rev( long dat ){ long now = 0; while ( d原创 2013-10-31 19:52:43 · 3275 阅读 · 0 评论 -
UVa 10042 - Smith Numbers
#include #include #include #include using namespace std;int visit[32000];int prime[32000];int make_prime_list(){ memset( visit, 0, sizeof(visit) ); int count = 0; for ( int i = 2 ; i < 32原创 2014-05-01 02:09:33 · 1608 阅读 · 0 评论 -
UVa 12373 - Pair of Touching Circles
题目:给你一个n*m的矩形的空间,在里面放入,圆心和半径都是整数的2个相切圆。 有多少种不同的方法,旋转后相同的认为是不同的。分析:数论。两圆有一个最小的放置边界矩形,求出矩形的摆放个数即可。 能够符合题目条件的只有两种情况: 1.两圆的连心线与矩形的边界平行; 2.两圆的连心线是斜边,但是原创 2014-04-02 22:00:59 · 1277 阅读 · 0 评论 -
UVa 10699 - Count the factors
题目:计算一个数的素数因子个数。分析:数论。直接打表计算1000000内的素数,然后枚举取余判断即可。#include #include #include using namespace std;int visit[1000001];int prime[700001];int main(){ memset( visit, 0, sizeof(visit) ); in原创 2014-03-24 02:11:12 · 1097 阅读 · 0 评论 -
UVa 10168 - Summation of Four Primes
题目:判断给定的数字能否写成4个素数的和。分析:数论。1.如果N = 8 时,如果N为奇数则令N = 2 + 3 + K, N为偶数则令N = 2 + 2 + K这样K为偶数且K>=4,这时满足哥德巴赫猜想: 一个偶数可以拆成2个素数和的形式。通过循环拆解K即可。 素数判定可以利用筛法打表,或者直接按照随机判定算法判原创 2014-03-23 18:31:04 · 1130 阅读 · 0 评论 -
UVa 694 - The Collatz Sequence
题目:还是经典的3n+1问题,这次给了一个计算过程中间值的上界,超过直接停止。分析:模拟。直接模拟即可。注意:中间计算用long long防止溢出。#include #include #include using namespace std;int X( long long n, long long l ){ if ( n == 1LL ) return 3; int原创 2014-03-24 13:04:15 · 1252 阅读 · 0 评论 -
UVa 371 - Ackermann Functions
题目:3n+1经典问题,求区间中最大运算次数。分析:直接在区间中计算,取最值即可。注意:1.区间的端点可能是反的;2.计算过程中用long long防止溢出。#include #include #include using namespace std;int X( long long n ){ if ( n == 1LL ) return 3; int count =原创 2014-03-24 13:01:13 · 1712 阅读 · 0 评论 -
UVa 10162 - Last Digit
题目:已知S = Σ(i^i)其中(1 分析:数论,找规律。设 i = 10*a+b 则 i^i = (10*a+b)^(10*a+b),有: 记f(i)=(i^i)% 10 = (10*a+b)^(10*a+b)% 10 = b ^(10*a+b) { 二项式定理 } 利用f(i)找规律: f(10*k+0)原创 2014-07-14 11:57:01 · 5335 阅读 · 0 评论 -
UVa 305 - Joseph
题目:有2n个人,前n个是好人h原创 2014-06-25 10:12:18 · 1415 阅读 · 0 评论 -
UVa 107 - The Cat in the Hat
题目:有一只高度为h的猫,头上d分析:说明:原创 2014-06-26 10:41:08 · 788 阅读 · 0 评论 -
UVa 10302 - Summation of Polynomials
题目:求立方和(题目很长,不过看最后一句话就明白了)。分析:数学题。公式原创 2014-06-30 19:45:15 · 741 阅读 · 0 评论 -
UVa 10922 - 2 the 9s
题目:分析:说明:#include #include #include using namespace std;int main(){ string data; while ( cin >> data ) { if ( data.length() == 1 && data[0] == '0' ) break; int sum = 0,flag1 = 0,原创 2014-06-30 23:56:17 · 2384 阅读 · 0 评论 -
UVa 913 - Joana and the Odd Numbers
题目:将奇数按照1,3,5的个数按顺序写成三角形原创 2014-06-30 02:12:05 · 2334 阅读 · 0 评论 -
UVa 10889 - The Lost Gift
题目:给你R个红球和B个黑球,从这些球中取出相同颜色的概率是50%; 然后丢了一些黑球,剩下的黑球不少于原来的70%; 现在给你红球和剩下的黑球个数,求可能丢了几个黑球。分析:数学题。 首先,根据组合数学列出等式2*[C(n,2)+C(m,2)] = C(m+n,2):原创 2014-05-27 10:58:59 · 997 阅读 · 0 评论 -
UVa 524 - Prime Ring Problem
题目:把1-n,连续的放到一个环里,使相邻的数字和为素数,输出所有结果。分析:搜索+剪枝。如果裸搜,用dancing-links那种拆装的链表,应该差不多满足16的数据量。 这里利用一个性质进行剪枝:相邻的数字一定是奇偶性不同的数字。 (如果上述假设不成立,则存在相邻的奇数或偶数,那么他们的和一定是大于2的偶数,不是素数)原创 2014-07-03 08:50:27 · 2793 阅读 · 2 评论 -
UVa 496 - Simply Subsets
题目:给你两个集合,判断集合关系(相等,z)原创 2014-07-06 01:30:23 · 2935 阅读 · 0 评论 -
UVa 10125 - Sumsets
题目:给你n个数让你在里面找到会不相同的4个数a,b,c,d,使得 d = a + b + c。分析:数学题,散列表。这是一个优化问题。 方法1:暴力法; 先排序,然后直接利用四层循环求解,找到解后直接跳出,也可以以利用二分代替最后一层循环; 这种方法,如果遇到特殊的数据就会TLE; 方法2原创 2014-07-05 10:14:17 · 2549 阅读 · 0 评论 -
UVa 128 - Software CRC
题目:CRCjiaoyan分析:说明:原创 2014-08-01 17:19:22 · 746 阅读 · 0 评论 -
UVa 10742 - The New Rule in Euphomia
题目:给你一个数,问有多少对素数的和小于这个数。分析:数论。利用素数表枚举求解。 1.打表计算1000000内的素数(筛法); 2.对于每个输入的数字 v,枚举他的所有拆分情况; 设F(i)是不超过数字 i 的素数的个数,S(v)为 v 的拆分种数,则: S(v)= sum(m原创 2014-07-27 23:29:00 · 999 阅读 · 0 评论 -
UVa 10325 - The Lottery
题目:给你一个数n以及m个数字,问n原创 2014-07-28 12:58:43 · 1363 阅读 · 0 评论 -
UVa 10193 - All You Need Is Love
题目:判断两个2进制的串是否huz原创 2014-07-27 23:40:06 · 2644 阅读 · 0 评论 -
UVa 11057 - Exact Sum
题目:已知n个数a[1..n],还有另一个数M,在前n个数中找到差值最小的两个数使得他们的和是M。分析:数学。排序,找M/2。然后向两边分别扩展即可。 设a[s]是第一个大于M/2的数字, 如果M是偶数,并且存在至少两个M/2,则a[s-1]、a[s-2]一定是M/2; 否则a[s-1] M,从这两点向两边扩展即可原创 2014-08-02 10:31:47 · 1080 阅读 · 0 评论 -
UVa 846 - Steps
题目:给你两个数,在两个数中间插入数字,使得xian原创 2014-06-18 23:09:03 · 1037 阅读 · 0 评论 -
UVa 10392 - Factoring Large Numbers
题目:建一个分析:说明:原创 2014-06-19 11:12:51 · 578 阅读 · 0 评论 -
UVa 408 - Uniform Generator
题目:随机生成器,给出STEP和MOD问是否可以生成全部的[0,MOD-1]的序列。分析:数论。原创 2014-06-19 11:43:45 · 1731 阅读 · 0 评论