数学_数论
TouchDreamer
这个作者很懒,什么都没留下…
展开
-
lightOJ 1028 Trailing Zeroes (I)
题目分析 我们首先可以发现如果一个数x能转化为另一个y进制,很明显x能整除y。这样一来就转化成求因子数 x=p1a1∗p2a2∗p3a3∗.......∗pnan x = p1^{a1}*p2^{a2}*p3^{a3}*.......*pn^{an} 这样因子个数为: ans=(1+a1)∗(1+a2)∗(1+a3)∗......∗(1+an)ans = (1+a1)*(1+原创 2017-01-15 14:49:08 · 227 阅读 · 0 评论 -
LightOJ 1289 LCM from 1 to n
题目分析 这道题首先给人的感觉就是素数筛,但是空间明显不够,但是看看时间好像可以在4ms算完,于是就要优化空间了,然后学习了一个神奇的数据结构位图。话说位图看了半天其实就是在每个数组中用保存的2进制数来表示该数是否存在。因此我们设mod为32,那么对与每一个数i都可以的到一个商即i/mod,和一个余数i%mod,并且这一对数是唯一的,因此我们就可以在vis下标为i/mod存储1<<(i%mod)原创 2017-03-01 21:26:32 · 537 阅读 · 0 评论 -
Light OJ 1282 Leading and Trailing
题目分析 这道题的后三位直接快速幂即可,但是输出需要处理一下,不够的补0即可。前三位我们可以利用log10 n运算,我们就可以得到一个数,那么很明显这个数整数部分是科学计数法中10的倍数,小数部分就是对应的数值了,对应乘100正好可以得到三位数。#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#原创 2017-02-19 19:17:08 · 338 阅读 · 0 评论 -
POJ 1830 开关问题
题目分析 高斯消元不过要判断是否有解,并且有多少解。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 35;int a[maxn], b[maxn], A[maxn][maxn], n;void guess(){原创 2017-01-18 20:09:13 · 285 阅读 · 0 评论 -
LightOJ 1236 Pairs Forming LCM(唯一分解定理)
题目分析 思路:把n分解成素因数的形式n=p1^c1+p2^c2+…pm^cm 假设已找到一对(a,b)的lcm=n 有a=p1^d1+p2^d2+…pm^dm b=p1^e1+p2^e2+…pm^em 易知max(di,ei)=ci 先考虑有序数对(a,b),由唯一分解定理知,a的每一个素因数的幂的大小都决定一个独一无二的数。 所以(a,b)的种数就是(di原创 2017-01-17 19:16:29 · 431 阅读 · 0 评论 -
LightOJ 1278 Sum of Consecutive Integers
题目分析 这道题一开始没有思路,然后看了网上的推导过程。具体是这样:sum=a+(a+1)+(a+2)+......+(a−k+1)sum = a+(a+1)+(a+2)+......+(a-k+1),然后可以推出式子n=(2a+k−1)/(2k),2a−1=2n/k−kn = (2a+k-1)/(2k), 2a-1=2n/k-k,因为2a−12a-1为奇数,所以k必须为奇数。(奇数*偶数=偶数原创 2017-01-17 17:32:29 · 335 阅读 · 0 评论 -
LightOJ 1259 Goldbach`s Conjecture
题目分析 就是打表,然后发现超内存,然后用了bool数组发现过了,才400ms,表示这个OJ跑的真快。对于素数注意判重。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1e7;#define LL long l原创 2017-01-17 16:15:28 · 318 阅读 · 0 评论 -
lightOJ 1245 Harmonic Number (II)
题目分析 我的做法就是枚举1到sqrt(n),然后会发现n/i只会出现一次,但是对应的i会出现(n/i-n/(i+1))次,可以想一下如果n为100,那么1出现(100/1-100/2)次,即100除以51,52,52……..100都为1。因此1直接计算即可。#include <cmath>#include <cstdio>#include <cstring>#include <iost原创 2017-01-17 15:48:50 · 324 阅读 · 0 评论 -
lightOJ 1220 Mysterious Bacteria
题目分析 这道题我就是直接枚举sqrt(n)的出的结果,但是当n为负数且得到的p是偶数是明显是不合理的,因此遇到这种情况continue即可。#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define LL原创 2017-01-17 15:12:02 · 247 阅读 · 0 评论 -
lightOJ 1215 Finding LCM
题目分析 借鉴了别人的代码,其实就是通过a∗b=gcd(a,b)∗lcm(a,b)a*b = gcd(a,b)*lcm(a,b)来求其中一个未知量,并且要未知量最小。代码中的注释写的非常清楚。#include <bits/stdc++.h>using namespace std;typedef long long ll;ll gcd(ll a, ll b){ return b ?原创 2017-01-17 14:21:58 · 251 阅读 · 0 评论 -
LightOJ 1197 Help Hanzo
题目解析 本题就是一道双重素数筛的题目,在挑战程序设计上也有介绍,但是本题我忽略了1不是素数,wa了一发。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define LL long longconst int maxn = 1e5+100;原创 2017-01-17 12:50:14 · 332 阅读 · 0 评论 -
LightOJ 1138 Trailing Zeroes (III)
题目分析 这道题刚开始拿到手中并没有什么好的想法,但是自己想一下会发现,n!我们会发现末尾含有0,说明相乘的时候必然可以拆分出2和5,同时是2的倍数明显比5的倍数多很多,那么我们找0的个数就等价于找5的个数,然后对于5的个数,我们通过二分是5的多少倍,同时我们需要求出是51,52,53,.....,5m5^1, 5^2, 5^3,....., 5^m的多少倍,累计即可。#include <cs原创 2017-01-17 10:17:43 · 193 阅读 · 0 评论 -
LightOJ 1138 Trailing Zeroes (III)
题目分析 这道题刚开始拿到手中并没有什么好的想法,但是自己想一下会发现,n!我们会发现末尾含有0,说明相乘的时候必然可以拆分出2和5,同时是2的倍数明显比5的倍数多很多,那么我们找0的个数就等价于找5的个数,然后对于5的个数,我们通过二分是5的多少倍,同时我们需要求出是51,52,53,.....,5m5^1, 5^2, 5^3,....., 5^m的多少倍,累计即可。#include <cs原创 2017-01-17 10:13:34 · 260 阅读 · 0 评论 -
LightOJ 1090 Trailing Zeroes (II)
题目分析 这道题的意思就是让你求Crn∗pqC_n^r*p^q中末尾0的个数,那么很明显就是让你求算得的10的个数,而10能转化为2*5,那么我们就可以打表求10610^6范围内每个数可以表示成2和5分别的个数。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespac原创 2017-01-16 16:46:35 · 213 阅读 · 0 评论 -
LightOJ 1077 How Many Points? (变种gcd)
题目分析 这道题是挑战程序设计上的原题,就是求gcd(abs(x1-x2), gcd(y1-y2))+1;#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long LL;LL gcd(L原创 2017-01-15 20:10:46 · 487 阅读 · 0 评论 -
lightOJ 1045 Digits of Factorial (数位计数)
题目分析 首先我们知道log(a∗b)=log(a)+log(b)log(a*b) = log(a)+log(b),那么很明显如果是在k进制下n的阶乘,那么位数为lognk!+1=log1k+log2k+log3k+......+lognk+1log_k^n!+1 = log_k^1+log_k^2+log_k^3+......+log_k^n+1,那么结果已经很明显了。我们可以先处理处10进制原创 2017-01-15 16:40:57 · 286 阅读 · 0 评论 -
蓝桥杯 历届试题 数字游戏
题目分析 这道题给了一个很明显的一个序列,那么就是数列可以一次写为:(1+0),(1+0+1),(1+0+1+2),(1+0+1+2+3)......(1+0+1+2+..+n−1)(1+0), (1+0+1), (1+0+1+2),(1+0+1+2+3)......(1+0+1+2+..+n-1),这样就转化为1加上一个等差数列,那么直接按照等差数列求和公式Sn=(a1+an)∗n/2S_n原创 2017-03-19 20:58:59 · 413 阅读 · 0 评论