![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【素数/同余/不定方程/乘性函数】
文章平均质量分 91
张松超
这个作者很懒,什么都没留下…
展开
-
素数
数可以分为两类,素数,合数;合数又可以分解为素数;所以掌握一些有关素数的知识很有必要;(素数定义:只能被1和自己整除的数成为素数;)1.①线性筛素数(Eratosthenes筛法)伪代码如下:const int maxn=100005;bool v[maxn];void found_prime()//筛法素数打表 { int m=sqrt(maxn+0.5); memse原创 2017-04-07 16:52:45 · 1139 阅读 · 0 评论 -
BZOJ ~ 1385 ~ Division expression (欧几里得算法)
题解原式化为情况下最有可能。然后看能否把x2的约去即可。当然不能把上面那个数字乘出来了,它太大了,所以我们拿上面的每一个数字和x2去约GCD即可。#include<bits/stdc++.h>using namespace std;const int MAXN = 1e4+5;typedef long long LL;int n, a[MAXN];int mai...原创 2018-10-01 19:23:45 · 288 阅读 · 0 评论 -
POJ ~ 2115 ~ C Looooops (扩展欧几里得)
题解设答案为x,由题意得,同余方程 => 。然后求得最小的非负整数解 x 就是答案。//#include<bits/stdc++.h>#include<iostream>#include<cstdio>using namespace std;typedef long long LL;void exgcd(LL a, LL b, ...原创 2018-10-01 19:08:13 · 223 阅读 · 0 评论 -
HDU ~ 2669 ~ Romantic (扩展欧几里得)
题意求ax+by=1的最小非负整数解x和对应的y,无解输出“sorry”。题解裸题。先求出最小的非负整数解x,然后根据x求出y即可。#include<bits/stdc++.h>using namespace std;typedef long long LL;void exgcd(LL a, LL b, LL& d, LL& x, LL&am...原创 2018-10-01 18:42:23 · 223 阅读 · 0 评论 -
POJ ~ 1061 ~ 青蛙的约会 (扩展欧几里得)
题解假设答案为a,其实就是求解:,化为。对应到中,a = m-n,b = L, c = y-x。x为a,y为k。要求最小的非负整数x。假设的一组解为(x0,y0),那么通解为所以最小非负解为。//#include<bits/stdc++.h>#include<iostream>#include<cstdio>#include<...原创 2018-10-01 18:32:16 · 235 阅读 · 0 评论 -
ZOJ ~ 3593 ~ One Person Game (扩展欧几里得,不定方程)
题意你要从A走到B,你每次可以走a步,b步,a+b步问最小需要走多少步?无法到达输出 -1。题解先不考虑a+b步的情况,那么我们要求解的就是:,如果,证明无解。假设原方程一组解为x0,y0,那么通解(x,y)为:,。其实也就是两条直线:,取一条平行于y轴的直线 x = t :如果 x 和 y 异号,假设x > 0,y < 0也就是往前走x次a步,往后走y次...原创 2018-10-01 16:41:46 · 315 阅读 · 0 评论 -
ZOJ ~ 3609 ~ Modular Inverse (扩展欧几里得,乘法逆元)
题意求a*x ≡ 1(mod m),求最小的正整数 x ,如果没有解输出 “Not Exist”。思路求乘法逆元。a*x ≡ 1(mod m)转化为 ,求最小的正!整数 x 。#include<bits/stdc++.h>using namespace std;typedef long long LL;void exgcd(int a, int b, int...原创 2018-10-01 15:09:25 · 200 阅读 · 0 评论 -
HDU ~ 2138 ~ How many prime numbers (Miller_Rabin)
题意:给你N个数,判断这N个数字中有多少个素数?思路:Miller_Rabin素数判定法。因为数字值比较大所以普通判断可能会超时,所以要用到这个。#include<bits/stdc++.h>using namespace std;long long qpow(long long a, long long n, long long mod){ long long ans ...原创 2018-04-12 12:23:28 · 237 阅读 · 0 评论 -
最大公约数与最小公倍数(gcd,lcm)
先来说求最小公约数的方法1.欧几里得算法(辗转相除法)int gcd(int a,int b) { return b==0?a:gcd(b,a%b);}设两数为a、b(a>b),用gcd(a,b)表示a,b的最大公约数,r=a (mod b) 为a除以b的余数,k为a除以b的商,即a÷b=k.......r。辗转相除法即是要证明gcd(a,b)=gcd(b,r)。第一原创 2017-07-19 16:52:56 · 3479 阅读 · 0 评论 -
Codeforces ~ 1076B ~ Divisor Subtraction(思维,暴力)
题意现在有一个数N,这个N执行以下程序:1.如果N=0,结束程序2.找到N最小的素因子d3.N−=dN-=dN−=d,执行次数+1问执行次数。思路可以发现如果N是一个偶数,那么接下来的过程全都是 -2。可以发现需要很少次就可以把N变为一个偶数,所以暴力即可。#include<bits/stdc++.h>using namespace std;typedef lon...原创 2018-11-14 21:35:50 · 459 阅读 · 0 评论