解方程
时间:2019-11-11
本文章向大家介绍解方程,主要包括解方程使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
链接:https://ac.nowcoder.com/acm/problem/16499
来源:牛客网
题目描述
已知多项式方程:
a0+a1x+a2x2+...+anxn=0
求这个方程在[1, m]内的整数解(n和m均为正整数)。
输入描述:
第一行包含2个整数n、m,每两个整数之间用一个空格隔开。
接下来的n+1行每行包含一个整数,依次为a0,a1,a2,……,an。
输出描述:
第一行输出方程在[1, m]内的整数解的个数。
接下来每行一个整数,按照从小到大的顺序依次输出方程在[1, m]内的一个整数解。
示例1
输入
2 10 1 -2 1
输出
1 1
示例2
输入
2 10 2 -3 1
输出
2 1 2
示例3
输入
2 10 1 3 2
输出
0
备注:
对于30%的数据,0<n>i|≤100,an≠0,m≤100;
对于50%的数据,0<n>i|≤10100,an≠0,m≤100;
对于70%的数据,0<n>i|≤1010000,an≠0,m≤10000;
对于100%的数据,0<n>i|≤1010000,an≠0,m≤1000000。
解析:
我们考虑枚举m,对于每一个m,我们去检验它是否是多项式方程的一个解,检验的方法用到了秦九韶算法,秦九韶算法的作用就是求一个多项式方程的结果时,只需枚举n次,假设我们有一个一元四次方程a0+a1x+a2x2+a3x3+a4x4=0,我们可以将这个式子化为(x(x(x(a4x+a3)+a2)+a1)+a0)=0 ,我们从大到小枚举i,对于每一个i,我们让sum加上ai再乘上x,最后让sum+a0,看sum是否=0即可。
这题对于100%的数据,0<n>i|≤1010000,an≠0,m≤1000000,所以读入时用类似快读的方法,不断取模就行。
至于什么是秦九韶算法,百度上有比较详细的解释。
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <string> 5 #include <cstring> 6 #include <cstdlib> 7 #include <cmath> 8 #include <stack> 9 #include <queue> 10 #include <set> 11 #include <map> 12 #include <vector> 13 #include <ctime> 14 #include <cctype> 15 #include <bitset> 16 #include <utility> 17 #include <sstream> 18 #include <complex> 19 #include <iomanip> 20 #define inf 0x3f3f3f3f 21 typedef long long ll; 22 using namespace std; 23 #define mod 1000000007 24 using namespace std; 25 int n,m,a[110],ct,jg[1000010]; 26 ll read() 27 { 28 ll sum=0; 29 char str; 30 int fg=1; 31 while(str=getchar(),!((str>='0'&&str<='9')||str=='-')); 32 do 33 { 34 if(str=='-') 35 { 36 fg=-1; 37 continue; 38 } 39 sum=sum*10+str-'0'; 40 sum%=mod; 41 } 42 while((str=getchar(),(str>='0'&&str<='9')||str=='-')); 43 return fg*sum; 44 } 45 void print(ll x) 46 { 47 if(!x) 48 return; 49 print(x/10); 50 putchar(x%10+'0'); 51 } 52 bool pd(ll x) 53 { 54 ll sum=0; 55 for(int i=n; i>=1; i--) 56 { 57 sum=(sum+a[i])*x; 58 sum%=mod; 59 } 60 sum+=a[0]; 61 sum%=mod; 62 return !sum; 63 } 64 int main() 65 { 66 ios::sync_with_stdio(false); 67 n=read(); 68 m=read(); 69 for(int i=0; i<=n; i++) 70 a[i]=read(); 71 for(int i=1; i<=m; i++) 72 if(pd(i)) 73 jg[++ct]=i; 74 cout<<ct<<endl; 75 for(int i=1; i<=ct; i++) 76 { 77 print(jg[i]); 78 printf("\n"); 79 } 80 return 0; 81 }
原文地址:https://www.cnblogs.com/mxnzqh/p/11834344.html
- easyui事件和方法的使用方法
- go语言实现通过FTP库自动上传web日志
- Go语言实现顺序存储的线性表实例
- hashpartitioner-Spark分区计算器
- Could not find artifact com.sun:tools:jar:1.5.0
- Java面试官最爱的volatile关键字
- Golang实现带优先级的channel
- java在指定目录下执行dos命令或者bat文件
- 搭建本地 golang 文档服务器
- 浅析Java中的final关键字
- 大话企业级android读书笔记(一)
- 转--Go语言用堆排序的方法进行一千万个int随机数排序
- go语言,变量引用的用法
- 大话企业级android读书笔记(三)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Netty之美--零拷贝
- Netty对ThreadLocal的升级
- 【避坑指南】12.2 新功能优化器统计顾问(Optimizer Statistics Advisor)及常见问题和解决方法
- 初试 Open Service Mesh(OSM)
- K8S 生态周报| runc v1.0-rc92 发布
- 聊聊 Python 面试最常被问到的几种设计模式(上)
- 推荐一套个人文档管理系统。
- OpenCV图像读取(imread) 显示(imshow) 保存(imwrite)的冷知识点
- CodeReview实践-Gerrit自动触发JenkinsCI
- OpenCV常用图像拼接方法(一) :直接拼接
- ClickHouse|MergeTree引擎之数据分区
- OpenCV常用图像拼接方法(二) :基于模板匹配拼接
- 为了解决 Prometheus 大内存问题,我竟然强行将 Prometheus Operator 给肢解了。。
- 面试官:webpack原理都不会?
- 算法篇:树之对称二叉树