当前位置: 首页>编程语言>正文

acm模式模版python acm python

        又是一周恍恍惚惚的就过去了,这周的话有专业课结课了,所以还加上复习的内容,所以总体拿出来的时间不是特别多,这星期前几天看了一些python的用法(在数论上的),因为python和c++在ACM中用法不一样,所以也尝试着用python去写了一些数论的题目,感觉还是有一些差距的,就是有时候是比较方便的,因为python提供了很多现成的函数,所以在很多时候用python十分方便。

        这周的话就是继续往下面看的博客,(主要是本来说好下周考试,结果就没练习题目,否则总是想那些没做出来的题),下周的话就要记录做的好题了,模板题目博客看的也差不多了,记录一些在彩签上,然后也方便复习,其中也包括一些以前的知识点,还有一些线段树的内容,基础的题目之前看的时候并不是很认真最后就忘掉了好多,所以就需要经常复习与思考。

        这周的博客内容,扩展欧几里得的应用(求解满足ax≡b(mod n)的所有x的过程,即用到扩展欧几里得),以及扩展BSGS算法的应用,值得注意的地方是得到的只有不大于cnt的解,可能会漏掉小于cnt的解,所以有时候就需要用暴力再求解一遍,还有就是离散对数的拓展的那两篇文章,也是介绍了这个BSGS算法,以及扩展的应用,目前就只理解了奴版上的例题,深入的思考还是没有进行好

补充说明:BSGS算法是用于求解形如

acm模式模版python acm python,acm模式模版python acm python_#include,第1张

的高次同余方程,其中A , B , P为已知,要求p是一个质数。

用map来写一个模板,主要觉得用哈希表太麻烦了

#include<iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include<map>
#include <set>
#include <unordered_map>
#define ll long long
#define f(m,n) for(int i=m;i<n;i++)
#define g(n,m) for(int i=n;i<=m;i++)
using namespace std;
ll quick_mod(ll a, ll b, ll c)//费马小定理 
{
	ll ans = 1;
	while (b)
	{
		if (b % 2 == 1)
			ans = (ans * a) % c;
		b /= 2;
		a = (a * a) % c;
	}
	return ans;
}

int log_mod(int a, int b, int n)
{
	int m;
	int ss;
	int tt = 1, i;
	m = (int)sqrt(n + 0.5);
	ss = quick_mod(quick_mod(a, m, n), n - 2, n);
	map<int, int> v;
	v[1] = 0;
	f(1,m) {
		tt = tt * a % n;
		if (!v.count(tt)) 
			v[tt] = i;
	}
	f(0,m) {
		if (v.count(b)) 
			return i * m + v[b];
		b = b * ss % n;
	}
	return -1;//如果无解的话,返回-1即可
}

         还有就是新阅读的模板了,这里模板积累是够了的,所以在题目上应该更精进一些,下两周还上网课,暂时课业压力就会小一些,所以就要搜集数论的题目来练习了,这周新学习的内容也不是很多,但是新学习的内容,也需要慢慢理解,但大部分博客上的新内容看的差不多了,例题也做了一些,但这个星期并不是很多,主要是把一些模板转换成了python语言,下星期的话就必须要开始做题了,没有考试压力也会小一些,继续加油。

 还有就是日常看一道数论经典题目,毕竟是要准备蓝桥杯


https://www.xamrdz.com/lan/52m1951207.html

相关文章: