题目描述

已知多项式方程:

a0+a1x+a2x2+⋯+anxn=0

求这个方程在 [1,m]内的整数解(n 和 m 均为正整数)。

输入输出格式

输入格式:

共 n+2 行。

第一行包含 2个整数 n,m,每两个整数之间用一个空格隔开。

接下来的 n+1n+1n+1 行每行包含一个整数,依次为 a0,a1,a2…an

输出格式:

第一行输出方程在 [1,m] 内的整数解的个数。

接下来每行一个整数,按照从小到大的顺序依次输出方程在 [1,m]内的一个整数解。

思路:

有一个奇妙的东西叫秦九韶算法

(不知道的请左转百度)

然后我们看到a都很大

于是我们想到了hash

将 a hash掉

之后验证时取膜即可

代码:

// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rii register int i
#define rij register int j
#define p1 19260817
#define p2 23333
using namespace std;
char ai[];
long long a1[],a2[];
int ans[],n,m,cnt;
inline void c1(int wz,int len)
{
int pd=;
int fi=;
if(ai[]=='-')
{
pd=-;
fi=;
}
long long ans=ai[fi]-'';
for(rii=fi+;i<=len-;i++)
{
ans*=;
ans+=ai[i]-'';
ans%=p1;
}
a1[wz]=ans*pd;
}
inline void c2(int wz,int len)
{
int pd=;
int fi=;
if(ai[]=='-')
{
pd=-;
fi=;
}
long long ans=ai[fi]-'';
for(rii=fi+;i<=len-;i++)
{
ans*=;
ans+=ai[i]-'';
ans%=p2;
}
a2[wz]=ans*pd;;
}
inline bool check(int v)
{
long long ans=a1[n];
for(rii=n;i>=;i--)
{
ans*=v;
ans%=p1;
ans+=a1[i-];
ans%=p1;
}
if(ans!=)
{
return ;
}
ans=a2[n];
for(rii=n;i>=;i--)
{
ans*=v;
ans%=p2;
ans+=a2[i-];
ans%=p2;
}
if(ans!=)
{
return ;
}
return ;
}
inline void sr()
{
int wz=;
char l=getchar();
while(l!=)
{
ai[wz]=l;
l=getchar();
wz++;
}
}
int main()
{
scanf("%d%d\n",&n,&m);
for(rii=;i<=n;i++)
{
memset(ai,,sizeof(ai));
// scanf("%s",ai);
sr();
int ltt=strlen(ai);
c1(i,ltt);
c2(i,ltt);
}
// for(rii=0;i<=n;i++)
// {
// cout<<a2[i]<<" ";
// }
for(rii=;i<=m;i++)
{
if(check(i)==)
{
cnt++;
ans[cnt]=i;
}
}
cout<<cnt<<endl;
for(rii=;i<=cnt;i++)
{
printf("%d\n",ans[i]);
}
}

解方程(hash,秦九韶算法)的更多相关文章

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

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

  2. NOIP 2014 D2T3 解方程 Hash大法好

    题目大意:给定高次方程an*x^n+...+a1*x^1+a0*x^0=0 求[1,m]区间内有多少个整数根 ai<=10^10000.m<=100W 懒得高精,考场上写的long dou ...

  3. LOJ2503 NOIP2014 解方程 【HASH】

    LOJ2503 NOIP2014 解方程 LINK 题目大意就是给你一个方程,让你求[1,m]中的解,其中系数非常大 看到是提高T3还是解方程就以为是神仙数学题 后来研究了一下高精之类的算法发现过不了 ...

  4. luogu2312 解方程 (数论,hash)

    luogu2312 解方程 (数论,hash) 第一次外出学习讲过的题目,然后被讲课人的一番话惊呆了. 这个题,我想着当年全国只有十几个满分.....然后他又说了句我考场A这道题时,用了5个模数 确实 ...

  5. luogu2312 [NOIp2015]解方程 (秦九韶)

    秦九韶算法:多项式$a_0+a_1x+a_2x^2+...+a_nx^n=a_0+x(a_1+x(a_2+...+(xa_n))..)$,这样对于一个x,可以在O(n)求出结果 为了避免高精度,我们同 ...

  6. Hash表算法详解

    Hash表定义 散列表(Hash table,也叫哈希表),是根据关键字值(Key value)直接进行访问的数据结构.也就是说,它通过把关键字(关键字通过Hash算法生成)映射到表中一个位置来访问记 ...

  7. 【hash】什么是hash,什么是哈希,什么是hash散列,什么是hash一致性算法【关于hash的详解】

    什么是hash,什么是哈希,什么是hash散列,什么是hash一致性算法

  8. luogu题解P2312解方程--暴力模+秦九韶

    题目链接 https://www.luogu.org/problemnew/show/P2312 分析 这道题很毒啊,这么大的数. 但是如果多项式\(\sum_{i=0}^N a[i]*X^i=0\) ...

  9. [noip2014]P2312 解方程

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

随机推荐

  1. Implementation: Quick Sort 2014-08-19

    #include <stdio.h> void print(int *a, int start , int end); void quick_sort(int *a, int start, ...

  2. List的设置值,跟变量的位置关系(变量范围的变化导致结果差别很大)

    我们想要的结果是: [RegnTypeCharge: null,null,null,null,1,null,null,null,null,null,null,null,null,null,null,] ...

  3. SharePoint 2013 - Upgrade

    1. 升级到SP2013时,需要对data connection文件(UDCX文件)进行修改: 1. Mark all UDCX File (Ctrl + A) and open them. 2. F ...

  4. 【Linux】应用程序内存段布局

    一.各段内存布局 内存布局图 1.BSS段(Block Started by Symbol)未初始化段 2.linux ELF base address is 0x8048000 应用程序虚拟地址起始 ...

  5. 常见HTTP状态200,304,403,404,503

    下面提供 HTTP 状态码的完整列表.您也可以查看 W3C官方HTTP 状态码说明(英文). 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态码. 100(继续) 请求者应当继续提出请求 ...

  6. java面试题之----mysql表优化方案

    本文转载自segmentfault,原文链接:https://segmentfault.com/a/1190000006158186. 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考 ...

  7. JDBC操作数据库的基本步骤:

    JDBC操作数据库的基本步骤: 1)加载(注册)数据库驱动(到JVM). 2)建立(获取)数据库连接. 3)创建(获取)数据库操作对象. 4)定义操作的SQL语句. 5)执行数据库操作. 6)获取并操 ...

  8. siebel学习笔记-应用/数据访问控制

    应用/数据访问控制Siebel提供的两种主要的访问控制方式在View级别和Data(record)级别: 1.View级别的访问控制:一个企业通常按照功能进行工作的区分,分配给一个用户的功能决定了他能 ...

  9. jdk是什么?jdk1.8安装配置方法

    jdk是什么呢?jdk的是java development kit的缩写,意思是java程序开发的工具包.也可以说jdk是java的sdk. 目前的JDK大致分三个大版本:Java SE:Java P ...

  10. redis未授权访问getshell

    redis未授权访问的问题一年前就爆了,当时刚开始学安全,还不太懂.今天借着工作的机会来搞一把,看看能不能拿下一台服务器.其实前几天就写好了一直想找个实际环境复现一下,一直没有找到,只说下大致思路. ...