题目描述

已知多项式方程

\[a_0 + a_1x + a_2x^2 + \dots +a_nx^n=0
\]

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

输入输出格式

输入格式

共 n + 2n+2 行。

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

接下来的 n+1n+1 行每行包含一个整数,依次为$ a_0,a_1,a_2\ldots a_n $

输出格式

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

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

说明

对于 \(30\%\) 的数据:\(0<n\le 2\),\(|a_i|\le 100\),\(a_n≠0\),\(m<100\)。

对于 \(50\%\) 的数据:\(0<n\le 100\),\(|a_i|\le 10^{100}\),\(a_n≠0\),\(m<100\)。

对于 \(70\%\) 的数据:\(0<n\le 100\),\(|a_i|\le 10^{10000}\),\(a_n≠0\),\(m<10^4\)。

对于 \(100\%\) 的数据:\(0<n\le 100\),\(|a_i|\le 10^{10000}\),\(a_n≠0\),\(m<10^6\)。

题解

对于解方程,除了靠我机智的人脑我想不出除了暴力枚举解之外更好的方法了,但是,如果我们每次都进行枚举解,如何check呢?带回去算,哇,这个计算量我也是很震惊的,我们当然不能按着他的顺序来算啦,我们可以用秦九韶算法。


秦九韶算法

我们知道并没有直接求解高阶方程的公式,所以我们就没有办法直接求出我们所需要的答案,那么面对这个高阶多项式我们应该真么办呢?根据我们的观察,我们发现有下述的等价变形:

\[a_0+a_1x+a_2x^2+\dots+a_nx^n\\ \ \ \ \ \ \ \ =a_0+x(a_1+x(a_2+\dots+x(a_n)\dots)))
\]

我们从最里面的括号算起,我们会发现假设我们已经算出了第\(i\)个括号中的答案是\(ans_i\),我们再算第\(i + 1\)个括号时是这样算的:\(a_{i-1}+ans_ix\)其实我们数算出的\(ans_i\)就成了下一个括号中\(x\)的系数了。这样的话我们就可以利用一个\([1,n]\)的for循环搞定了,模板长成这个样子:

xs  = 0;
for(int i = n; i >= 1; -- i)
xs = ((xs + a[i]) % mod * x)% mod;

仅仅知道这个离AC这道题还有一段距离,我们来看一下数据,哇这个范围是要写高精的吗???,显然,高精这种麻烦的东西我们要放在最后来考虑。我们观察到,如果有\(f(x)mod \ \ p=0\)那么\(f(xmod\ \ p) mod\ \ p= 0\)

那么我们只用在每次计算之后进行一个取模操作就行了,为了避免冲突,我们选取一个较大的质数作为我们的模数(我选的是\(10^9+7\)),在输入的过程中我们也可以一边输入一边对输入的数进行取模,这个改一下读入优化就可以实现了。

long long read()
{
long long x = 0; int w = 0; char ch= getchar();
for(;!isdigit(ch); w |= (ch == '-'),ch = getchar());
for(;isdigit(ch);x = ((x << 1) + (x<< 3)) % mod + (ch ^48), ch = getchar());
return w ? -x : x;
}

代码

#include<bits/stdc++.h>
using namespace std;
long long a[105], ans[1000005], xs;
const long long mod = 1e9 + 7;
long long read()
{
long long x = 0; int w = 0; char ch = getchar();
for(;!isdigit(ch); w |= (ch == '-'), ch = getchar());
for(;isdigit(ch);x = ((x << 1) + (x << 3)) % mod + (ch ^ 48), ch = getchar());
return w ? -x : x;
}
int main()
{
int n, cnt = 0;
long long m;
scanf("%d%lld", &n, &m);
for(int i = 0; i <= n; ++ i) a[i] = read(), a[i] = a[i] % mod;
for(long long x = 1; x <= m; ++ x)
{
xs = 0;
for(int i = n; i >= 1; -- i)
xs = ((xs + a[i]) % mod * x) % mod;
if((xs + a[0]) % mod == 0) ans[++ cnt] = x;
}
printf("%d\n", cnt);
for(int i = 1; i <= cnt; ++ i) printf("%d\n", ans[i]);
return 0;
}

【NOIP2014】解方程的更多相关文章

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

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

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

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

  3. LOJ2503 NOIP2014 解方程 【HASH】

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

  4. bzoj 3751: [NOIP2014]解方程 同余系枚举

    3.解方程(equation.cpp/c/pas)[问题描述]已知多项式方程:a ! + a ! x + a ! x ! + ⋯ + a ! x ! = 0求这个方程在[1, m]内的整数解(n 和 ...

  5. [NOIP2014]解方程

    3732 解方程  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 输入描述 Input Descrip ...

  6. [BZOJ3751][NOIP2014] 解方程

    Description 已知多项式方程:a0+a1*x+a2*x^2+...+an*x^n=0 求这个方程在[1,m]内的整数解(n和m均为正整数).   Input 第一行包含2个整数n.m,每两个 ...

  7. NOIP2014解方程

    题目:求一个n次整系数方程在1-m内的整数解  n<=100 系数<=10000位 m<=100W 题解:最暴力的想法是枚举x,带入求值看是否为0. 这样涉及到高精度乘高精度,高精度 ...

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

  9. bzoj 3751: [NOIP2014]解方程

    Description 已知多项式方程: a0+a1x+a2x^2+...+an*x^n=0 求这个方程在[1,m]内的整数解(n和m均为正整数). 解题报告: 这题比较诡,看到高精度做不了,就要想到 ...

  10. 【bzoj3751】[NOIP2014]解方程 数论

    题目描述 已知多项式方程: a0+a1*x+a2*x^2+...+an*x^n=0 求这个方程在[1,m]内的整数解(n和m均为正整数). 输入 第一行包含2个整数n.m,每两个整数之间用一个空格隔开 ...

随机推荐

  1. 如何应用ASP.NET MVC中的分部视图

    概述: 在ASP.NET Web Form的开发经验中,对于User Control使用比较频繁,可以减少重复的代码,利于页面模块化,这个概念也被引入了ASP.NET MVC.即“分部视图”. 1.创 ...

  2. 如何构建ASP.NET MVC4&JQuery&AJax&JSon示例

    背景: 博客中将构建一个小示例,用于演示在ASP.NET MVC4项目中,如何使用JQuery Ajax. 步骤: 1,添加控制器(HomeController)和动作方法(Index),并为Inde ...

  3. nodejs文件上传组件multer使用

    多图上传,发送端: var express = require('express') var rp = require('request-promise') var fs = require(&quo ...

  4. android ConstraintLayout布局

    解析ConstraintLayout的性能优势 Android新特性介绍,ConstraintLayout完全解析 1.子控件的位置约束属性: layout_constraintRight_toLef ...

  5. vertical-align属性baseline(转)

    图7-34 文字和图片内容默认垂直对齐方式为基线对齐 上一小节讲解了行高与单行纯文字的垂直居中,而如果行内含有图片和文字,在浏览器内浏览时,读者可以发现文字和图片在垂直方向并不是沿中线居中,而是沿基线 ...

  6. SSM实现图片上传管理操作

    Spring MVC 实现文件上传 时序图 利用 Spring MVC 实现文件上传功能,离不开对 MultipartResolver 的设置.MultipartResolver 这个类,你可以将其视 ...

  7. jvm 类文件结构学习

    本文以代码示例来学习 java 类文件的结构,其中对类文件结构的学习均来自周志明先生所著的 <深入理解 Java 虚拟机>一书,在此表示诚挚的感谢. 代码如下: package com.r ...

  8. 使用jQuery的validation插件实现表单校验

    前端表单校验: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  9. 粗粒度权限控制(拦截是否登录、拦截用户名admin权限)

    RBAC --> 基于角色的权限控制 tb_user tb_role tb_userrole tb_menu(增.删.改.查) tb_rolemenu 1 说明     给出三个页面:index ...

  10. LOJ6066:「2017 山东一轮集训 Day3」第二题

    传送门 二分答案 \(k\),考虑如何 \(hash\) 使得做起来方便 把每个点挂在 \(k+1\) 级祖先上,考虑在祖先上删除 这道题巧妙在于其可以对于 \(dfs\) 序/括号序列 \(hash ...