*任意n的一道式子
来源:互联网 发布:q币回收软件 编辑:程序博客网 时间:2024/06/09 17:08
Given a prime number C(1≤C≤2×105) C(1≤C≤2×105), and three integers k1, b1, k2 (1≤k1,k2,b1≤109) (1≤k1,k2,b1≤109). Please find all pairs (a, b) which satisfied the equation ak1⋅n+b1 ak1⋅n+b1+bk2⋅n−k2+1 bk2⋅n−k2+1 = 0 (mod C)(n = 1, 2, 3, ...).
Please output all pairs (a, b) in lexicographical order.
23 1 1 2
Case #1:1 22
这道题真的很难,必须要很好的数学功底以及足够的思维能力,还有敢于尝试且有很好的总结能力。然而很正常的,我做不出来。。
看来很多百度的,只有一种做法我比较认同,然后ac了。
消化了他的做法。在这里讲讲:(同时总结一点他人的套路,看看以后自己用不用得到)
首先,(这是第一步),就是想到用n = 1代入看看结果如何。可以得到a^k1+a^bi+b = 0.(mod c)
这样可以得到b = -(a^(k1+b1))(mod c)。
然后明显1条式子并不能推出什么。(可能这就是一个逻辑的走向吧,我想既然哦自己没能做出这题,没能自然而然的想到这样的解法,但是或许可以向他这样,遇到n的,而且n 任意的,就先从1开始代起,看看能不能得到什么)
代入2之后
a^(2*k1+b1) + b^(k2+1) = 0;
由于 b = -(a^(k1+b1))(mod c)。于是可以换掉一个a。(其实根本的就是结合两个式子求得规律)
b^(k2+1)=-a^(2*k1+b1)=b*a^(k1)。
所以很明显了
b^k2=a^k1;
于是可以只要枚举所有a,由a推出b(b = -(a^(k1+b1))(mod c))。
然后检验是否满足,满足就输出,ok,ac!
在此膜拜一下那个想出这种做法的dalao向他学习。
ac代码:
#include <stdio.h>#include <iostream>#include <cstring>#include <cmath>#include <algorithm>#include <queue>#include <sstream>#define INF 1e9using namespace std;typedef long long ll;ll c,k1,k2,b1;ll quickpow(ll a,ll b){ ll ans = 1; while (b!=0) { if(b&1) { ans*=a; ans%=c; } a*=a; a%=c; b>>=1; } return ans;}//以后快速幂都写一个函数好了,方便又不会乱bool judge(ll a,ll b){ if(quickpow(a,k1)!=quickpow(b,k2)) { return false; } return true;}//判断的int main(void){ int k = 1; while (scanf("%lld %lld %lld %lld",&c,&k1,&b1,&k2)!=EOF) { int flag = 0; printf("Case #%d:\n",k++); for (ll a = 1;a < c;a++) { ll b = -quickpow(a,(b1+k1)%(c-1)); b = (b+c)%c; if(judge(a,b)) { printf("%lld %lld\n",a,b); flag = 1; } } if(!flag) cout<<-1<<endl; }}//要记得用ll,一开始没用ll还错了- -
0 0
- *任意n的一道式子
- 二进制式子表示任意一个自然数的意义
- HDU2256&&HDU4565:给一个式子的求第n项的矩阵快速幂
- 将一个M进制的数N转换成十进制表示的式子。
- 关于括号式子的计数
- 正则表达式子的使用
- 栈模拟式子的计算
- 一道求n!的算法题
- 求解一道有关N-Queen的问题
- 计算任意n-1个数的乘积
- java计算n的任意次方
- 计算 任意大N的M次方
- 任意N个数的子集生成算法
- 求任意整数n的阶乘
- 计算一个任意整数的n次方
- google的一道面世题:(f(n)==n)
- 4.8 用递归方法编程计算以下式子的值: n^1+n^2+n^3+n^4+...+n^10,其中 n=1,2,3
- 数组中任意n个数的全排列(DFS)以及任意n个数的组合
- linux批量删除进程
- [51nod1187]寻找分数
- JS Ajax 请求实例详解(基础入门篇,以.NET MVC 为例)
- 使用IntelliJ IDEA 15和Maven 开发Spring Data JPA + MVC Web应用
- spring mvc 登录和非登陆资源控制配置
- *任意n的一道式子
- Fiddler 设置断点,修改服务器响应消息
- openssl升级
- 算术表达式求解——堆栈的应用
- js程序 下拉框功能,当选择大学下拉框时,隐藏下拉框,将其对应的值,展示到span标签中
- db64封装函数,可以直接用。
- LeetCode--ZigZag Conversion
- 简单的模板整理(待续)
- 十大热门行业公布 成都仍是跳槽首选