题目链接

https://www.luogu.org/problemnew/show/P2312

分析

这道题很毒啊,这么大的数。

但是如果多项式\(\sum_{i=0}^N a[i]*X^i=0\)则\(\sum_{i=0}^N a[i]*X^i \mod P=0\)

于是我们可以暴力膜一模,然后在\([1,m]\)中枚举就好了。但是呢,万一这个多项式的值是\(P\)的倍数,也会变成0,所以保险起见搞几个又大又质的数膜一膜就好了。

但是\(Exciting\)的是呢,我在洛谷上开O2能过,而BZOJ就不那么友好。

然后luogu题解提供一种减少枚举冗杂的方Fa。我们不是选多个数膜一模吗,如果在膜\(P_i\)的意义下已经不是\(0\)了,枚举其他的就没意义了。于是呢,我们先可以选出一个小点的模数\(P_x\),在\([1,P_x]\)中先枚举一遍,记录多项式值为0的是哪些。最后再枚举\([1,m]\),由于先前的限制,就会减少许多无用选择

然后多项式求值有个叫秦九韶算法的\(O(N)\)方法,不了解的可以看一看

https://www.cnblogs.com/Rye-Catcher/p/9260599.html

代码

我选择了两个数来做模数,较小的是23333,较大的是19260817

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cctype>
#define ll long long
#define ri register int
using namespace std;
const int maxn=105;
const int inf=0x7fffffff;
const int p1=19260817,p2=71806291,p3=23333;
template <class T>inline void read(T &x){
x=0;int ne=0;char c;
while(!isdigit(c=getchar()))ne=c=='-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;return ;
}
int n,m;
ll a[maxn],c[maxn];
inline void input(int id){
a[id]=c[id]=0;int ne=0;char ch;
while(!isdigit(ch=getchar()))ne=ch=='-';
a[id]=c[id]=ch-48;
while(isdigit(ch=getchar())){
a[id]=((a[id]<<3)%p1+(a[id]<<1)+ch-48)%p1;
c[id]=((c[id]<<3)%p3+(c[id]<<1)+ch-48)%p3;
}
a[id]=ne?-a[id]:a[id];
c[id]=ne?-c[id]:c[id];return ;
}
int ans[1000005],tot=0;
bool ok[1000005];
inline bool pre_calc(ll u){
ll x=0;
for(ri i=n;i>=0;i--){
x=(x*u+c[i])%p3;
}
return x==0?1:0;
}
inline bool calc(ll u){
ll x=0;
for(ri i=n;i>=0;i--){
x=(x*u+a[i])%p1;
}
return x==0?1:0;
}
int main(){
read(n),read(m);
for(ri i=0;i<=n;i++){
input(i);
}
memset(ok,0,sizeof(ok));
for(ri i=1;i<=p3;i++){
if(pre_calc(1ll*i))ok[i]=1;
}
for(ri i=1;i<=m;i++)
if(ok[i%p3]&&calc(1ll*i)){
ans[++tot]=i;
}
printf("%d\n",tot);
for(ri i=1;i<=tot;i++)printf("%d\n",ans[i]);
return 0;
}

luogu题解P2312解方程--暴力模+秦九韶的更多相关文章

  1. 洛谷P2312 解方程(暴力)

    题意 题目链接 Sol 出这种题会被婊死的吧... 首先不难想到暴力判断,然后发现连读入都是个问题. 对于\(a[i]\)取模之后再判断就行了.注意判断可能会出现误差,可以多找几个模数 #includ ...

  2. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  3. 洛谷 P2312 解方程 题解

    P2312 解方程 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 [1,m][1,m] 内的整数解(\(n\) 和 \(m\) 均为 ...

  4. bzoj3751 / P2312 解方程

    P2312 解方程 bzoj3751(数据加强) 暴力的一题 数据范围:$\left | a_{i} \right |<=10^{10000}$.连高精都无法解决. 然鹅面对这种题,有一种常规套 ...

  5. [noip2014]P2312 解方程

    P2312 解方程 其实这道题就是求一个1元n次方程在区间[1, m]上的整数解. 我们枚举[1, m]上的所有整数,带进多项式中看看结果是不是0即可. 这里有一个技巧就是秦九韶算法,请读者自行查看学 ...

  6. codevs3732==洛谷 解方程P2312 解方程

    P2312 解方程 195通过 1.6K提交 题目提供者该用户不存在 标签数论(数学相关)高精2014NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录   题目描述 已知多项式方程: a ...

  7. 洛谷 P2312 解方程 解题报告

    P2312 解方程 题目描述 已知多项式方程: \(a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\)求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) 均为正整 ...

  8. P2312 解方程(随机化)

    P2312 解方程 随机化的通俗解释:当无法得出100%正确的答案时,考虑随机化一波,于是这份代码很大可能会对(几乎不可能出错). 比如这题:把系数都模一个大质数(也可以随机一个质数),然后O(m)跑 ...

  9. 洛谷 P2312 & bzoj 3751 解方程 —— 取模

    题目:https://www.luogu.org/problemnew/show/P2312 https://www.lydsy.com/JudgeOnline/problem.php?id=3751 ...

随机推荐

  1. Docker Image

    Docker 对 container 的使用基本是建立在 LXC 基础之上,然而 LXC 存在的问题是难以移动,难以通过标准化的模板去制作.重建.复制和移动 container. 在以 VM 为基础的 ...

  2. document.querySelectorAll遍历

    document.querySelectorAll兼容性良好,在之前的项目中就其遍历方式出了错误,先做个小结: 1.for循环 传统遍历方法 for(var i= 0; i< document. ...

  3. NSubstitute.Analyzers检测NSubstitute用法冲突

    NSubstitute是一个.Net环境使用的,简洁,语法友好的Mock库.语法简洁的缺点是有一些失败的用法很难察觉和检测.比如试图mock一个非虚拟成员-NSubstitute不能看到这些成员所以不 ...

  4. spring-boot集成8:集成shiro,jwt

    Shrio是一个轻量级的,基于AOP 和 Servlet 过滤器的安全框架.它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权. JWT(JSON Web Token)是 ...

  5. dozer转化对象

    依赖: commons-beanutils-1.9.3.jar.commons-lang-2.6.jar.dozer-5.3.2.jar.jcl-over-slf4j-1.7.25.jar.slf4j ...

  6. redis集群 应该注意的问题

    redis cluster注意的问题 : ‘cluster-require-full-coverage’参数的设置.该参数是redis配置文件中cluster模式的一个参数,从字面上基本就能看出它的作 ...

  7. activeMQ(2)

    queue与topic的对比  JMS MESSAGE:消息头 消息体 消息属性 DeliveryMode: 消息体: 消息属性:识别  去重  重点标注 //创建会话session 事务.签收 如果 ...

  8. SSRF绕过姿势

    0x00 什么是SSRF? SSRF(Server-Side Request Forgery,服务器端请求伪造):是一种由攻击者构造形成由服务器端发起请求的一个漏洞. SSRF 攻击的目标是从外网无法 ...

  9. OS X更新Catalina 10.15.2后虚拟机黑屏(已解决)

    简述 问题:更新OS X 10.15.2后VM Ware进unbuntu 16.0黑屏,但是VM Ware 有显示,情况类似如下: 解决办法   重启系统,command+r 进入恢复模式,打开bas ...

  10. mysql --explain+slowlog

    一.EXPALIN 在SQL语句之前加上EXPLAIN关键字就可以获取这条SQL语句执行的计划 那么返回的这些字段是什么呢? 我们先关心一下比较重要的几个字段: 1. select_type 查询类型 ...