Light OJ
alusang
T^T
展开
-
LightOJ-1024-高精度乘法和最小公倍数
这个题就是求一串数的最小公倍数,但是由于太多了,所以结果会很大,所以需要高精度乘法#include #include #include #include #include using namespace std;const int maxn=1e4+5;int t,n,k,x;vector prime;int vis[maxn];int arr[maxn];int a原创 2018-04-02 15:31:53 · 419 阅读 · 0 评论 -
Light OJ-1220-唯一分解
哇,这个题求最大的p,那么只需要求所有素因子的个数的最大公约数~但是需要处理x是负数的时候,此时p必定是奇数,所以在求出最大公约数后一直除以2。#include #include #include #include #include #include using namespace std;const int maxn=1e6;int t;long long int原创 2018-04-29 17:54:13 · 219 阅读 · 0 评论 -
LightOJ-1215-纯数论
这个题首先求出a,b的最小最小公倍数设为m。我的做法是唯一分解m和l,再算出c,c其实就是l中含有但是m中不含有的素因子和l中指数大于m中指数的素因子。网上找到的这个代码就很厉害了QAQ。求出m后,先把l/m,这样就是m中不含有的和l指数大的减去m指数小的素因子。然后需要求出m中l中都含有的素因子就行了。累乘上去。也就是求最小公约数~!#include #include #原创 2018-04-27 20:39:52 · 325 阅读 · 0 评论 -
Light OJ-1214-大数取余
#include #include #include #include #include #include using namespace std;char s[205];long long int num;int t;int main(){ scanf("%d",&t); for(int i=1;i<=t;i++) { getc原创 2018-04-27 11:41:05 · 181 阅读 · 0 评论 -
Light OJ-1197-大区间筛素数
这个题意很明确,就是求一个两端都是闭区间的素数的个数。但是数据量太大,不能直接打表筛选素数,题目明确b-a范围很小,所以每次筛选b-a这个范围内的就好了。将[a,b]存储在[0,b-a]内。#include <cstdio>#include <cstring>#include <cmath>#include <vector>#include ...原创 2018-04-27 11:23:46 · 185 阅读 · 0 评论 -
LightOj-1163-思路
我们先设C=(A-B),然后这个题根据题意很容易得出一个表达式:A-A/10=C。然后同时乘以10得到:10*A-(A/10)*10=C*10。这时会发现(A/10)*10等于A-x,x是A的末尾数。所以:9*A+x=10*C。枚举末尾数即可。#include <cstdio>#include <cstring>#include <cmath>#inclu...原创 2018-04-20 19:41:32 · 125 阅读 · 0 评论 -
LightOj-1028-唯一分解定理求解因子个数
数据量太大所以不能用一般的方法求解。这里学的一个方法,先处理出根号下最大数据量的素数,即1e6内的素数。然后唯一分解,分解出一个就在答案上乘以这个数个数加一。这样就是所有的质因子排列组合成不同的因子,举例说明:12的质因子是2,2,3,那么答案就是2的个数+1乘以3的个数+1等于6。下面有个地方要处理下,就是如果分解完了不是1,说明这个数是大于1e6的素数。还有素数平方小于等于n是必须的优化。感觉原创 2018-04-19 23:04:37 · 409 阅读 · 0 评论 -
LightOj-1138-二分
这个题首先第一个突破口是,从阶乘的角度来看,0的个数只由5贡献,因为2足够多。第二点,n阶乘的所有数中5的个数由n除以5求和可得,这个太巧妙想不到。然后就是二分寻找一个数n,使得5的个数等于q,由于0的个数是1e8,所以上限是5e8(由上面第二点知,5e8才有1e8个0)。最后自己吐槽一下:二分是不可能会的,这辈子都不可能的QAQ#include #include #inclu原创 2018-04-19 22:03:34 · 179 阅读 · 0 评论 -
LightOj-1090-思路,分解,前缀和
找出这个数含有多少个2,或者5,然后最少有几对2*5就是有几个末尾0。#include #include #include #include #include using namespace std;const int maxn=1e6+10;int t,n,r,p,q;int sum2[maxn],sum5[maxn];void ini()//前1e6个数2.5的个数原创 2018-04-19 19:49:36 · 390 阅读 · 0 评论 -
LightOj-1067-Lucas定理
现在才看Lucas,真是菜QAQ。Lucas首先是解决大组合数取模问题的,C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p,循环求解这个公式就是Lucas。#include <iostream>#include <cmath>#include <vector>#include <cstring>#include &l...原创 2018-04-13 23:02:30 · 228 阅读 · 0 评论 -
LightOj-1045-emmmm
进制数为b,输入为n,则b进制下的n的位数为logb(n),然后换底公式可求解。#include #include #include #include #include #include using namespace std;const int maxn=1e6+5;int t,n,b,k;double ans[maxn];void ini(){ mems原创 2018-04-13 17:36:27 · 176 阅读 · 0 评论 -
LightOj-1077-GCD?!?!?!?
这个题就是求一段线段上整数点的个数。然后完全不知道这个竟然是两个边的最大公约数、、、也就是相似三角形的个数,所以加上一个原有的点就是答案。#include #include #include #include #include using namespace std;long long int x1,x2,yy,y2,t;long long int gcd(long lon原创 2018-04-19 11:53:08 · 167 阅读 · 0 评论 -
LightOJ-1014-求约数
首先说下题意,一开始怎么都没看懂,还是看了题解的题意。题意就是存在C个人,每个人吃Q个东西,一共有P个,剩余L个,问所有可能的Q,而且要求Q>L。即P-L个分给C个人吃,每人吃Q个,正好分完,所以就是求P-L的所有大于Q的约数。这个题其实是可以直接暴求约数的,最大就是循环不到5w次,但是一开始在循环用的i*i#include #include #include #includ原创 2018-04-12 20:12:50 · 173 阅读 · 0 评论 -
LightOJ-1007-欧拉函数打表
这个题又WA又TLE又MLE...几个点注意下就好,一是用unsigned long long int ,二是求前缀和,三是不需要再开一个数组#include #include #include #include #include #include using namespace std;int t,a,b,k;const int maxn=5e6+3;unsign原创 2018-04-12 17:53:19 · 200 阅读 · 0 评论 -
Light OJ - 1319 -中国剩余定理
这里简单说下中国剩余定理,去掉过程和证明。首先,这是解,ai是余数,M是所有模pi的乘积,Mi是M除以pi,ti是Mi的逆元,即 (Mi *ti)mod pi =1。#include #include #include #include #include using namespace std;typedef long long int ll;int n,t,k;原创 2018-04-02 17:36:35 · 155 阅读 · 0 评论 -
Light OJ-1234-调和级数求和(just处理)
哇,这个题在紫书上有一个公式,但是只有n很大的时候才能满足精度,于是看了题解。题解乍一看,哇,好高端,调和级数!仔细一看就是处理了下打表....#include #include #include #include #include #include using namespace std;const int mod=100;//每100个分成一组,存在一个数组元素里,根原创 2018-04-29 18:43:14 · 890 阅读 · 0 评论