NOIp 2014 解方程 【数学/秦九韶算法/大数取膜】By cellur925
题意:求高次方程的解及其个数。其中
1°
我们知道,高次方程是没有求根公式的。但是利用逆向思维,我们可以进行“试根法”,因为题目中给出了所求根的范围。但是多项式系数过于吓人,达到了sxbk的1e10000.longlong显然盛不下。只能看做字符串处理。然而即使是处理成字符串,我们也不可能真的去乘这么多。
2°
考虑取膜。我们把多项式系数进行取膜,它的相对效果和不取膜是一样的。(想一想,为什么)
除了对系数取膜,我们还可以考虑对x取膜。
- 如果 X 真的是一个根,那么取模后肯定是 0;但反之则是不确定。
- 逆否命题:如果取模之后不是 0,那么 X 肯定不是一个根。
- 我们就利用上面的这条性质来判断即可。- 考虑一个较小的模数 p。
- 如果对于 0<x<p 来说,代入 x 计算后不是 0,则那么对于 x+p,
x+2p, x+3p...,这些数代入计算后都不可能为 0。
- 所以我们只需要验证[1,p)之间的数,剩下的可以直接推得。
- 时间复杂度: O(TMN)。其中 T 为模数的个数 P。
我们当然还不能仅用一个数取膜,需要多个质数(通常用质数)来提高正确率,这并不是一个精确的算法,但在大多数情况下成立。
3°
难道在x比较小的时候,我们计算这个多项式的值也需要暴力搞嘛?
我们智慧的先人秦九韶早就计算了一种计算多项式的简化方法,复杂度O(n)
(你可以在高中数学必修3中学到它)
它大概长这样:
它的代码大概长这样:
bool check(int x,int mo)
{
ll num=;
for(int i=n+;i>=;i--)
num=(num*x+a[i][mo])%prime[mo];
return num==;
}
于是我们就可以 快速求解多项式的值了。
至此,本题就结束了=w=。
复杂度O(TMN),T为选取模数的个数。
Code
#include<cstdio>
#include<algorithm>
#include<cstring> using namespace std;
typedef long long ll; int n,m,ans;
char op[];
int a[][];
bool vis[];
int prime[]={,,,,,}; void read(int pos)
{
bool flag=;
int st=;
scanf("%s",op+);
if(op[]=='-') flag=,st=;
else st=;
for(int i=st;i<=strlen(op+);i++)
for(int j=;j<=;j++)
a[pos][j]=(a[pos][j]*+op[i]-'')%prime[j];
if(flag)
for(int j=;j<=;j++)
a[pos][j]=(prime[j]-a[pos][j])%prime[j];
} bool check(int x,int mo)
{
ll num=;
for(int i=n+;i>=;i--)
num=(num*x+a[i][mo])%prime[mo];
return num==;
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n+;i++) read(i);
for(int j=;j<=;j++)
{
int limit=min(prime[j]-,m);
for(int i=;i<=limit;i++)
if(!check(i,j))
for(int k=i;k<=m;k+=prime[j])
vis[k]=;
}
for(int i=;i<=m;i++)
if(!vis[i]) ans++;
if(!ans){printf("");return ;}
else printf("%d\n",ans);
for(int i=;i<=m;i++)
if(!vis[i]) printf("%d\n",i);
return ;
}
* 开始交的时候脑子抽了以为1e6是100000于是愉快地RE了三个点233
NOIp 2014 解方程 【数学/秦九韶算法/大数取膜】By cellur925的更多相关文章
- [NOIp 2014]解方程
Description 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) Input 输入文件名为equation .i ...
- [BZOJ3751] [NOIP2014] 解方程 (数学)
Description 已知多项式方程:$a_0+a_1*x+a_2*x^2+...+a_n*x^n=0$ 求这个方程在[1,m]内的整数解(n和m均为正整数). Input 第一行包含2个整数n.m ...
- 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】
3751: [NOIP2014]解方程 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 4856 Solved: 983[Submit][Status ...
- BZOJ 3751: [NOIP2014]解方程 数学
3751: [NOIP2014]解方程 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3751 Description 已知多项式方程: ...
- 【NOIP】提高组2014 解方程
[题意]已知n次方程(n<=100)及其所有系数(|ai|<=10^10000),求[1,m]中整数解的个数(m<=10^6). [算法]数论 [题解]如果f(x)=0,则有f(x) ...
- [BZOJ3751][NOIP2014]解方程(数学相关+乱搞)
题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .i ...
- 【NOIP TG 解方程】
存代码: #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> ...
- hdu 4704 Sum【组合数学/费马小定理/大数取模】By cellur925
首先,我们珂以抽象出S函数的模型:把n拆成k个正整数,有多少种方案? 答案是C(n-1,k-1). 然后发现我们要求的是一段连续的函数值,仔细思考,并根据组合数的性质,我们珂以发现实际上答案就是在让求 ...
- 解方程(hash,秦九韶算法)
题目描述 已知多项式方程: a0+a1x+a2x2+⋯+anxn=0 求这个方程在 [1,m]内的整数解(n 和 m 均为正整数). 输入输出格式 输入格式: 共 n+2 行. 第一行包含 2个整数 ...
随机推荐
- mongodb+php通过_id查询
在php中通过_id 在mongodb中查找特定记录: <?php $conn=new Mongo("127.0.0.1:27017"); #连接指定端口远程主机 $db=$ ...
- MFC Month Calendar Control 控件使用
在上层软件编程中,往往须要提供一个月历控件让用户选择对应日期或者用此月历控件来强调特定的一天. MFC的 Month Calendar Control 控件自系统升级到 Windows 7 之后,对于 ...
- 如何动态地给vSphere虚拟机模板注入信息
在做vSphere自动化安装过程中,遇到这样一个需求:将vCenter Server做成模板,在给用户自动化装好vSphere后, 下载vCenter Server模板并启动虚拟机,然后将vCente ...
- ssh命令、ping命令、traceroute 命令所使用的协议
在Node reboot or eviction: How to check if yourprivate interconnect CRS can transmit network heartbea ...
- 4. 基本TCP套接字编程
基本函数接口 socket函数 #include <sys/socket.h> int socket(int family, int type, int protocol); 成功时返回一 ...
- TGraphiControl响应WM_MOUSEMOVE的过程(以TPaintBox为例)good
起因:非Windows句柄控件也可以处理鼠标消息,我想知道是怎么处理的:并且想知道处理消息的顺序(比如TPaintBox和TForm都响应WM_Mouse消息该怎么办)界面:把TPaintBox放到T ...
- swt进度条 线程
import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import java.util.Rando ...
- Tomcat启动报:invalid LOC header (bad signature)的问题
原因:这种一般是因为项目依赖的某个jar包损坏引起的, 解决办法: 1.右键项目,选择maven,更新(update maven project) 2.通过右击项目名 -> Run as -& ...
- JavaScript正则表达式API
1. [代码][JavaScript]代码 参考自<Core JavaScript Reference 1.5> JavaScript正则表达式有两种写法(随便哪种,看个人习惯): ...
- iOS--控制器加载自定义view的xib
我们在项目中,经常需要使用到自定义的view,而xib布局显得更为简洁,那么如何加载一个自定义的xib呢,网上的方法也很多很多,就是因为太多了,我经常会弄混,所以总结其中一个使用,如果以后使用到其他的 ...