3751: [NOIP2014]解方程

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 3983  Solved: 850
[Submit][Status][Discuss]

Description

已知多项式方程:

a0+a1*x+a2*x^2+...+an*x^n=0
求这个方程在[1,m]内的整数解(n和m均为正整数)。

Input

第一行包含2个整数n、m,每两个整数之间用一个空格隔开。
接下来的n+1行每行包含一个整数,依次为a0,a1,a2,...,an。

Output

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

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

Sample Input

2 10
2
-3
1

Sample Output

2
1
2

这题好坑,下面写着ai<=1010000原来是ai<=10^10000

其实可以暴力枚举[1, m]中的每一个数带进方程里检测一下,复杂度O(nm)理论不超时

但是大整数所以GG,不行

这有两个结论:

①若f[x] = 0,那么f[x%p]%p = 0(p为质数)

②若f[x]%p = 0,那么f[x+p]%p = 0(p为质数)

其实以上两个结论都不是充要关系,也就是说若f[x%p]%p = 0,f[x]不一定等于0

但事实很多时候都能满足f[x] = 0,所以可以随便枚举几个p检测,如果都满足f[x%p]%p = 0,那么就当做f[x] = 0

复杂度O(nmc)(c为枚举的质数个数)

因为枚举的质数大约在4-10个的范围内才能AC,而且常数过大所以还是会超时

其实仔细想想就可以发现,其实只有在m<p的时候才需要代入方程检测,m>=p时直接对p取模就好了,m%p一定已经检测过了,这样复杂度O(npc)(p为最大质数,c为枚举个数)可以过

#include<stdio.h>
int a[6][105], p[6] = {0,19249,27647,23333,22367,14843};
int n, chk[6][28233], ans[1000005];
char str[20005];
int Read(int mod)
{int x, temp, now;x = temp = 1;if(str[1]=='-')x += 1, temp = -1;now = 0;for(;str[x]!='\0';x++)now = (now*10+str[x]-'0')%mod;now = (now*temp+mod)%mod;return now;
}
int Check(int x, int y)
{int i, sum, now;sum = 0, now = 1;for(i=0;i<=n;i++){sum = (sum+a[y][i]*now)%p[y];now = now*x%p[y];}return sum;
}
int main(void)
{int m, i, j, cnt;scanf("%d%d", &n, &m);for(i=0;i<=n;i++){scanf("%s", str+1);for(j=1;j<=5;j++)a[j][i] = Read(p[j]);}cnt = 0;for(i=1;i<=5;i++){for(j=0;j<=p[i]-1;j++)chk[i][j] = Check(j, i);}for(i=1;i<=m;i++){for(j=1;j<=5;j++){if(chk[j][i%p[j]])break;}if(j==6)ans[++cnt] = i;}printf("%d\n", cnt);for(i=1;i<=cnt;i++)printf("%d\n", ans[i]);return 0;
}

bzoj 3751: [NOIP2014]解方程(同余系)相关推荐

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

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

  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. [NOIP2014] 解方程

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

  4. 【NOIP2014】解方程【秦九韶】【高精度处理】

    传送门 其实秦九韶相信都会,主要是喜欢这道题对于高精度的处理. 我们发现这道题的情况比较特殊,a大的很,看起来是要高精度的鸭子. 不过我们发现一个事情.我们是在解方程,找到合适的x使多项式为0.那mo ...

  5. 10.24T3 解方程 取模意义下运算+秦九韶算法

    #1228 解方程 描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入 输入共n + 2 行. 第一行包含2 ...

  6. python解方程代码_Python解方程的技巧介绍(代码示例)

    本篇文章给大家带来的内容是关于Python解方程的技巧介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. numpy numpy 用来解方程的话有点复杂,需要用到矩阵的思 ...

  7. K-Dimensional Foil HihoCoder - 1628 线性代数 解方程

    题目大意: 给你n艘宇宙飞船的前三维坐标,给你这些飞船之间的距离,问在至少多少维的空间里才能使这些飞船之间的距离都等于所给的距离.如果在大于等于3维的坐标下不能满足就输出"Goodbye W ...

  8. python解复杂方程_Python数据处理篇之Sympy系列(五)---解方程

    前言 sympy不仅在符号运算方面强大,在解方程方面也是很强大. 本章节学习对应官网的:Solvers 官方教程 (一)求解多元一次方程-solve() 1.说明: 解多元一次方程可以使用solve( ...

  9. java2的7次方怎么表示_python编程解方程第二弹:10行代码解二次方程(纯字符)...

    用纯字符串格式来记录二次方程: '3x^2-10x-8=0' 'x^2-2x+1=0' '3x^2+14x+8=0' 'x^2=9' 二次方怎么表示呢?比如上面的^表示法,或者是python风格的** ...

最新文章

  1. delphi回调函数
  2. 解决从本地文件系统上传到HDFS时的权限问题
  3. 2021-05-08 docker  拷贝东西到镜像,和拷贝到宿主机
  4. 密码体制Feistel 密码的相关知识
  5. 电脑故障维修:新手必看的修电脑技巧!
  6. python语言中整型对应的英文_Python基本数据类型详细介绍(转)
  7. 电路 第五版 第三章电阻电路的一般分析
  8. htmlunit爬取js异步加载后的页面
  9. “10 倍工程师”引争议,程序员再被妖魔化?
  10. python卸载_手把手教Python环境安装
  11. Android Studio NDK报错:mips64el-linux-android-strip 找不到
  12. 中国科学院全国名词委组合数学和计算机科学研究开发中心 顾同新,有关组合数学家陆家羲的几点史实澄清.doc...
  13. hdoj3709(数位dp)
  14. MATLAB之特征值和特征向量
  15. 利用Drawable绘制圆角图片和圆形图片
  16. 【旧资料整理】笔记本无线共享路由器网络连接方法要点总结
  17. envi5.3处理高分二号影像数据详细过程记录
  18. 一套成熟的BPM系统应该有的功能
  19. 旷视科技 CVPR部分文章
  20. 这次彻底读透 Redis

热门文章

  1. 自学python要多久-怎么自学python,大概要多久?
  2. python不会英语不会数学怎么自学-零基础想自学PYTHON如果补数学怎么补?
  3. 普通人学python有意义吗-风变编程:普通人学Python有意义吗?
  4. python是什么 自学-怎么自学python,大概要多久?
  5. 如何找到靠谱的微信小程序,公众号H5开发外包,定制开发公司?
  6. android语音识别
  7. 线上阿里云mysql慢_MySQL · 案例分析 · RDS MySQL线上实例insert慢常见原因分析-阿里云开发者社区...
  8. FFmpeg源代码结构图 - 编码
  9. 计算机网络与计算机网络连接怎么办,电脑网络连接不上怎么办【是什么原因】...
  10. c语言用graphics画直线 带箭头直线_动漫人体比例怎么画?教你画出萌系少女!...