![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数论
River_____________
这个作者很懒,什么都没留下…
展开
-
勾股数(知道最小边,求另外两个边)
#include using namespace std;typedef long long ll;ll n;ll k;int main(){ cin >> n; if(n<=2) cout << "-1" <<endl; else { if(n%2==0) { k=n/2;原创 2017-04-18 20:28:48 · 709 阅读 · 0 评论 -
HDU 1796 (容斥)
直接二级制枚举子集,按照容斥加减加减就行了。#include #include #include #include using namespace std;typedef long long LL;LL N , M;const int maxn = 20;LL s[maxn];LL gcd(LL a , LL b){ if(b>a) swap(a,b);原创 2017-07-18 10:36:24 · 184 阅读 · 0 评论 -
HDU - 5514(容斥)
#include using namespace std;int m,n;int E;const int maxn = 1e5;int a[maxn],factor[maxn],vis[maxn],num[maxn]; /*vis:应该访问的次数;num:当前访问的次数*/void Init() { E = 0; memset(factor,0,sizeof(facto原创 2017-10-17 22:58:16 · 239 阅读 · 0 评论 -
ZOJ 3224(数学+暴力)
感谢 @dhk@mzxn的范围很大直接判断的肯定T;考虑划分,虽然n的取值范围很大,但是logai(n)的最大值为30,所以对于A~B最多划分成n*30个区间,每个区间内部每个数对应的的[logai(n)]都是相等的,直接计算个数就可以;这个区间内的合法的整数的个数就是能整除LCM{ [ logai(n) ] } 的数的个数;取对数可能会丢精度。。。第一次知道;#include原创 2017-11-05 20:15:03 · 218 阅读 · 0 评论 -
UVALive 4683(鸽巢原理 O(n))
#include #include #include using namespace std;const int maxn = 100000+5;int n;pair P[maxn];int s[maxn];int main(){ scanf("%d",&n); int sum = 0 ; for(int i = 1 ; i <= n ; i++)原创 2017-11-06 11:47:45 · 244 阅读 · 1 评论 -
Number With The Given Amount Of Divisors CodeForces - 27E(反素数相关)
给出一个n,求因数个数为n的最小正整数x。 任何一个数 质因数分解之后 x = 2^t1 + 3^t2 + 5^t3 + 7^t4…… 求因数的个数为n的数,就是求t1 * t2 * t3 * t4...... = n 的数。 在满足上述条件的数中找最小的一个就可以了。 #include <bits/stdc++.h> using namesp...原创 2018-05-22 23:34:09 · 178 阅读 · 0 评论 -
More Divisors ZOJ - 2562(质因子组合)
给一个最大为1e16的n,求[1,n]范围内因子数量最大的数字。 类似CF27E , 直接分层搜索就可以了,每层的节点依次为质数的1-k次方。 因为搜索的过程是求乘积的过程,不会进行很多次。 #include <bits/stdc++.h>using namespace std;typedef long long LL;vector<LL>v...原创 2018-05-23 13:30:21 · 242 阅读 · 0 评论 -
The Most Complex Number URAL - 1748(寻找最大反素数)
测试数据有点大,按照反素数性质剪枝 反素数的两个性质: ①组成反素数的质因子一定是从2开始的一些连续质数,因为如果不是从2开始的连续质数的话,例如2*2*3=12不是反素数,2*3*7也不是反素数。 ②n=2^t1*3^t2*5^t3*7^t4.....必然t1>=t2>=t3>=.... 所以按照性质②剪枝 #include <iostre...原创 2018-05-23 14:49:34 · 467 阅读 · 0 评论 -
zoj 3872 (一切找规律都是基于数学!)
给一个序列,求 这个序列的连续子序列中不重复的元素 的和不是找规律,这是一种数学的计数方法。对于每个数字来说,这个数字和这个数字之前出现的位置之间的数字就可以认定为是新增的。#include #include #include #include using namespace std;typedef long long ll;const int m原创 2017-04-05 22:21:09 · 422 阅读 · 0 评论 -
Aizu - 0009(素数表)
Aizu - 0009(素数表)要求很简单,求1-n有多少个素数,打表就行了#include #include #include #define maxn 1000000using namespace std;int prime[maxn],number[maxn];void getprime(){ int m=sqrt(maxn+0.5); for(in原创 2017-03-15 23:54:46 · 309 阅读 · 0 评论 -
Semi-prime H-numbers POJ - 3292(筛法变种)
Semi-prime H-numbersPOJ - 3292This problem is based on an exercise of David Hilbert, who pedagogically suggested that one study the theory of4n+1 numbers. Here, we do only a bit原创 2017-03-15 00:18:23 · 202 阅读 · 0 评论 -
拓展欧几里得
我在学习的过程中自己看书也是没看懂,也是看了别的大牛的总结,才慢慢有了一点理解。下面讲讲我学习拓展欧几里得的一些思路。首先拓展欧几里得是用来解决①a*x+b*y=gcd(a,b) 这样一个问题的。 ①a*x+b*y=gcd(a,b)将①中的a用b来代替,b用a%b来代替得到了②②b*x1+(a%b)y1=gcd(b,a%b)【此式一定有解,数论可以证明】;原创 2017-02-25 11:36:28 · 272 阅读 · 0 评论 -
大整数取模的一点理解
大整数取模的基本原理就是基于x无论乘上10的至少1次方,最终得出的模的结果都一样(这个卡了我好久。。。。) 测试:#include #include char a[10000 + 10];int main(){ int l, len;// while(~scanf("%s%d", a, &b)){// len = strlen(a);//原创 2017-02-25 12:27:22 · 2516 阅读 · 0 评论 -
uva10375(唯一分解定理)
题目要求:求两个组合数的商。分析:这个题对于数据大小的要求不是很高,一除一乘也能过,传统的解法是将阶乘中的每个数进行唯一分解记录每个素数出现的次数,最终相乘。收获:加强了对于唯一分解定理的理解和应用。唯一分解定理往往适用于不能直接计算会溢出而最终结果不会溢出的情况。 素数表印象加深。代码1: 一乘一除(0ms) #include原创 2017-02-25 17:17:40 · 529 阅读 · 0 评论 -
GCD XOR UVA - 12716
题意:《1》 已知a^b=c 等价于a^c=b和b^c=a; gcd(a,b)=a^b=c 得出c是a和b的约数,通过枚举c 和 a 得到b 然后判断gcd(a,a-c)=a^(a^c)这样gcd是logn 枚举是nlogn 总的时间复杂度为 n*logn*logn; 《3》 通过打印一些满足条件的结果会发原创 2017-03-05 10:21:27 · 234 阅读 · 0 评论 -
Little Pony and Expected Maximum CodeForces - 453A (数学期望)
Twilight Sparkle was playing Ludo with her friends Rainbow Dash, Apple Jack and Flutter Shy. But she kept losing. Having returned to the castle, Twilight Sparkle became interested in the dice that wer原创 2017-03-20 17:35:00 · 470 阅读 · 0 评论 -
HDU 1576(拓展欧几里得)
还算比较裸的EX_GCD#include #include #include #include using namespace std;void exgcd(int a,int b,int &x,int &y){ if(b==0) { x=1; y=0; return ; } else原创 2017-03-29 21:14:57 · 298 阅读 · 0 评论 -
双六问题(拓展欧几里得)
实际上这个问题可以转化为求 ax+by=1的解#include #include #include #include using namespace std;int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}void ex_gcd(int a,int b,int &x,int &y){ if(b==0)原创 2017-03-29 21:26:28 · 986 阅读 · 0 评论 -
素数的区间筛法
#include #include #include #include #include using namespace std;typedef long long ll;const int maxn = 1000005;bool is_prime[maxn];bool is_prime_small[maxn];ll prime[maxn];ll prime_num=0;原创 2017-03-29 22:05:24 · 450 阅读 · 0 评论 -
求一个数的所有素因子
public class Main { public static void main(String args[]) { Scanner scan = new Scanner(System.in); long n = scan.nextLong(); long q = (long) Math.sqrt(n + 1); long a[] = new long[500000]; ...原创 2019-03-07 18:47:22 · 1551 阅读 · 0 评论