题目传送门

题意:求高次方程的解及其个数。其中

我们知道,高次方程是没有求根公式的。但是利用逆向思维,我们可以进行“试根法”,因为题目中给出了所求根的范围。但是多项式系数过于吓人,达到了sxbk的1e10000.longlong显然盛不下。只能看做字符串处理。然而即使是处理成字符串,我们也不可能真的去乘这么多。

考虑取膜。我们把多项式系数进行取膜,它的相对效果和不取膜是一样的。(想一想,为什么)

除了对系数取膜,我们还可以考虑对x取膜。

- 如果 X 真的是一个根,那么取模后肯定是 0;但反之则是不确定。
- 逆否命题:如果取模之后不是 0,那么 X 肯定不是一个根。
- 我们就利用上面的这条性质来判断即可。

- 考虑一个较小的模数 p。
- 如果对于 0<x<p 来说,代入 x 计算后不是 0,则那么对于 x+p,
x+2p, x+3p...,这些数代入计算后都不可能为 0。
- 所以我们只需要验证[1,p)之间的数,剩下的可以直接推得。
- 时间复杂度: O(TMN)。其中 T 为模数的个数 P。
我们当然还不能仅用一个数取膜,需要多个质数(通常用质数)来提高正确率,这并不是一个精确的算法,但在大多数情况下成立。

难道在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的更多相关文章

  1. [NOIp 2014]解方程

    Description 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) Input 输入文件名为equation .i ...

  2. [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 ...

  3. 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】

    3751: [NOIP2014]解方程 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 4856  Solved: 983[Submit][Status ...

  4. BZOJ 3751: [NOIP2014]解方程 数学

    3751: [NOIP2014]解方程 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3751 Description 已知多项式方程: ...

  5. 【NOIP】提高组2014 解方程

    [题意]已知n次方程(n<=100)及其所有系数(|ai|<=10^10000),求[1,m]中整数解的个数(m<=10^6). [算法]数论 [题解]如果f(x)=0,则有f(x) ...

  6. [BZOJ3751][NOIP2014]解方程(数学相关+乱搞)

    题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .i ...

  7. 【NOIP TG 解方程】

    存代码: #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> ...

  8. hdu 4704 Sum【组合数学/费马小定理/大数取模】By cellur925

    首先,我们珂以抽象出S函数的模型:把n拆成k个正整数,有多少种方案? 答案是C(n-1,k-1). 然后发现我们要求的是一段连续的函数值,仔细思考,并根据组合数的性质,我们珂以发现实际上答案就是在让求 ...

  9. 解方程(hash,秦九韶算法)

    题目描述 已知多项式方程: a0+a1x+a2x2+⋯+anxn=0 求这个方程在 [1,m]内的整数解(n 和 m 均为正整数). 输入输出格式 输入格式: 共 n+2 行. 第一行包含 2个整数 ...

随机推荐

  1. Apatch常用的commons工具包介绍

    1.Commons BeanUtils http://jakarta.apache.org/commons/beanutils/index.html 说明:针对Bean的一个工具集.由于Bean往往是 ...

  2. 微信小程序项目实例

    目前为止最全的微信小程序项目实例 2018年03月20日 11:38:28 Happy王子乐 阅读数:4188   wx-gesture-lock  微信小程序的手势密码 WXCustomSwitch ...

  3. 疯狂Java学习笔记(77)-----------凝视注意事项

    代码凝视,能够说是比代码本身更重要.这里有一些方法能够确保你写在代码中的凝视是友好的: 不要反复阅读者已经知道的内容 能明白说明代码是做什么的凝视对我们是没有帮助的. // If the color ...

  4. AML LCD debuged

    root@k101:/ # cat /sys/class/lcd/debug                                          Usage:     echo basi ...

  5. java设计模式----真实世界的模式

    设计模式的定义: 模式是在某情境下,针对某问题的某种解决方案 反模式: 告诉你如何采用一个不好的解决方案解决一个问题 要点: 1.让设计模式自然而然地出现在你的设计中,而不是为了使用而使用 2.设计模 ...

  6. selenium-python问题日记

    今天在学习selenium时遇到了两个问题,在这里记录一下: 使用unittest框架组织了测试用例后,拓展一下功能就成了我最想做的事情, 所以决定添加发邮件功能. 使用python自带的smtpli ...

  7. html使用代码大全

    <DIV style="FONT-SIZE: 9pt">1)贴图:<img src="图片地址">1)首行缩进2格:<p styl ...

  8. ios+Appium+Java

    To run iOS tests, you can follow these steps : (Note : I am using Java language here in Eclipse IDE ...

  9. PCH in Xcode 6

    本文转载至 http://blog.csdn.net/wbdwsqwwn/article/details/40476151   新建文件 ⌘+N 选择 iOS/Mac -> Other -> ...

  10. SpringMVC中返回JSON时乱码的解决方案

    springMVC中返回JSON会出现乱码,解决如下: produces = "text/html;charset=UTF-8" @ResponseBody @RequestMap ...