【数论】[涨姿势:同余]P2312解方程
题目描述
已知多项式方程:\(a_0 + a_1x + a_2x^2+...+a_nx^n = 0\)
求这个方程在[1,m]内的整数解
\(1\leq n\leq100,|a_i|\leq 10^{10000},a_n≠0,m\leq 10^6\)
Solution
首先由于数据过大,只能字符串读入了hhh。然后:对于每个x,算出f(x)%pi,如果f(x)=0则f(x)%pi必然=0,多选几个素数,就可以在一定范围大小内判断成功。好像不够快?
\(f(x+p)≡f(x)(mod p)\)
对于一个x,\(f(x)≠0(mod p)\),则x+p,x+2p……均不为方程的解
有了这个性质就可以瞎搞了。取几个较大的质数搞一搞……
Code
#include <iostream>
#include <cstdio>
using namespace std;
inline long long read() {
  long long x = 0; int f = 0; char c = getchar();
  while (c < '0' || c > '9') f |= c == '-', c = getchar();
  while (c >= '0' && c <= '9') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
  return f? -x:x;
}
long long a[110][4], mod[4] = {10007, 11003, 12007, 13001};
int b[1000010], n, m;
string qwq;
bool check(long long x) {
  for (int k = 0; k < 4; k++) {
    long long tmp = a[n][k];
    for (int i = n - 1; i >= 0; i--)
      tmp = (tmp * x + a[i][k]) % mod[k];
    if (tmp) {
      for (int i = x; i <= m; i += mod[k]) b[i] = 1;
      return 0;
    }
  }
  return 1;
}
int main() {
  n = read(); m = read();
  for (int i = 0; i <= n; ++i) {
    cin >> qwq;
    for (int k = 0; k < 4; ++k) {
      long long flg = 1, tmp = 0;
      for (int j = 0; j < qwq.length(); ++j)
        if (qwq[j] == '-') flg = -1;
        else tmp = ((tmp << 1) + (tmp << 3) + (qwq[j] ^ 48)) % mod[k];
        a[i][k] = tmp * flg;
      }
  }
  int ans = 0;
  for (int x = 1; x <= m; x++)
    if (!b[x] && check(x)) ans++;
  printf("%d\n", ans);
  for (int i = 1; i <= m; i++)
    if (!b[i]) printf("%d\n", i);
  return 0;
}
												
											【数论】[涨姿势:同余]P2312解方程的更多相关文章
- codevs3732==洛谷 解方程P2312 解方程
		
P2312 解方程 195通过 1.6K提交 题目提供者该用户不存在 标签数论(数学相关)高精2014NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录 题目描述 已知多项式方程: a ...
 - 洛谷 P2312 解方程 题解
		
P2312 解方程 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 [1,m][1,m] 内的整数解(\(n\) 和 \(m\) 均为 ...
 - bzoj3751 / P2312 解方程
		
P2312 解方程 bzoj3751(数据加强) 暴力的一题 数据范围:$\left | a_{i} \right |<=10^{10000}$.连高精都无法解决. 然鹅面对这种题,有一种常规套 ...
 - 洛谷 P2312 解方程 解题报告
		
P2312 解方程 题目描述 已知多项式方程: \(a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\)求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) 均为正整 ...
 - 洛谷P2312 解方程题解
		
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
 - [noip2014]P2312 解方程
		
P2312 解方程 其实这道题就是求一个1元n次方程在区间[1, m]上的整数解. 我们枚举[1, m]上的所有整数,带进多项式中看看结果是不是0即可. 这里有一个技巧就是秦九韶算法,请读者自行查看学 ...
 - P2312 解方程(随机化)
		
P2312 解方程 随机化的通俗解释:当无法得出100%正确的答案时,考虑随机化一波,于是这份代码很大可能会对(几乎不可能出错). 比如这题:把系数都模一个大质数(也可以随机一个质数),然后O(m)跑 ...
 - 2018.11.02 洛谷P2312 解方程(数论)
		
传送门 直接做肯定会TLETLETLE. 于是考验乱搞能力的时候到了. 我们随便选几个质数来checkcheckcheck合法解,如果一个数无论怎么checkcheckcheck都是合法的那么就有很大 ...
 - 洛谷P2312 解方程 [noip2014] 数论
		
正解:数论 解题报告: 这儿是,传送门qwq 又是很妙的一道题呢,专门用来对付我这种思维僵化了的傻逼的QAQ 首先看题目的数据范围,发现a<=1010000,很大的一个数据范围了呢,那这题肯定不 ...
 
随机推荐
- markdown使用emoji
			
前几日写博客的时候在想是否能够在markdown中使用emoji呢
 - Spring中扩展点汇总 ------------- 框架图
			
原文链接:https://my.oschina.net/dachengxi/blog/3014156 转载于:https://my.oschina.net/dachengxi/blog/30141 ...
 - dotnet core系列之Background tasks with hosted services (后台任务)
			
这篇简单讲asp.net core 中的后台任务 用到的包: Microsoft.AspNetCore.App metapackage 或者加入 Microsoft.Extensions.Hostin ...
 - win10企业版|激|活|码
			
使用下面的激活码升级成企业版 NPPR9-FWDCX-D2C8J-H872K-2YT43 激活后,如果右下角出现未激活的白色字体用cmd命令,管理员窗口运行下面的命令 win10企业版用户请依次输入: ...
 - java字符串常用方法总结(更新中..)
			
一.String类 1.字符串拼接 String str1 = "abcd"; String str2 = "efgh"; System.out.println ...
 - YUV与RGB互转各种公式 (YUV与RGB的转换公式有很多种,请注意区别!!!)
			
一. 公式:基于BT.601-6 BT601 UV 的坐标图(量化后): (横坐标为u,纵坐标为v,左下角为原点) 通过坐标图我们可以看到UV并不会包含整个坐标系,而是呈一个旋转了一定角度的八边形, ...
 - 【转载】 C#中ArrayList集合类的使用
			
在C#的集合操作过程中,我们一般常用的集合类为List集合,List集合是一种强类型的泛型集合,其实还有一个ArrayList集合类,ArrayList集合类则非泛型类的集合,并且ArrayList集 ...
 - 老生常谈之js深拷贝与浅拷贝
			
前言 经常会在一些网站或博客看到"深克隆","浅克隆"这两个名词,其实这个很好理解,今天我们就在这里分析一下js深拷贝和浅拷贝. 浅拷贝 我们先以一个例子来说明 ...
 - 《linux就该这么学》课堂笔记11 LVM、防火墙初识
			
1.常用的LVM部署命令 功能/命令 物理卷管理 卷组管理 逻辑卷管理 扫描 pvscan vgscan lvscan 建立 pvcreate vgcreate lvcreate 显示 pvdispl ...
 - JVM&G1 GC 学习笔记(一)
			
在入门学习JVM的过程中,我们需要先了解关于JVM的知识中有哪些关键词或关键术语,今天在看完书后我想记录下来. Xms64mb 虚拟机初始化时设置内存大小为64mb Xmx256mb 设定虚拟 ...