luogu2312 解方程 (数论,hash)

第一次外出学习讲过的题目,然后被讲课人的一番话惊呆了.

这个题,我想着当年全国只有十几个满分.....然后他又说了句我考场A这道题时,用了5个模数

确实不好做想不到.

由于\(a\)非常大.转为以下思路.



\(f(x) = a_0+a_1x+a_2x^2+\cdots+a_nx^n\)

对于\(f(x) = 0\)则\(f(x)\%p = 0\)

\(f(x \% p) = 0\)

然后这里最好是选择素数.由于luogu数据较水,可以直接选择\(1e9 + 7\)水过.

判断会有误,所以这里选择两个数.

bzoj也有这道题,但是极其考验卡常技巧......

卡到吐血.还是没A,算了,不卡了....

记录:

#pragma GCC optimize(2)
#include <iostream>
#include <cstdio>
#define ll long long
const int maxN = 100 + 7;
const int maxM = 1e6 + 7;
const int p = 1e9 + 7;
const int p1 = 20030327; ll a[maxN],b[maxN];
ll n,m;
bool vis[maxM]; inline bool calc(int x)
{
long long sum = 0;
for(int i = n;i >= 1;i --)
{
sum = ( (long long) ( a[i] + sum ) * x ) % p;
}
sum = ( sum + a[0] ) % p;
return !sum;
} inline void read(ll &x1,ll &x2) {
x1 = 0,x2 = 0;
int f = 1;
char c = getchar();
while(c < '0' || c > '9') {if(c == '-')f = -1;c = getchar();}
while(c >= '0' && c <= '9') {
x1 = ( x1 * 10 + c - '0' ) % p;
x2 = ( x2 * 10 + c - '0') % p1;
c = getchar();
}
x1 *= f;
x2 *= f;
} inline bool calc1(int x)
{
long long sum = 0;
for(int i = n;i >= 1;i --)
{
sum = ( (long long) ( b[i] + sum ) * x ) % p1;
}
sum = ( sum + b[0] ) % p1;
return !sum;
} void print(int x)
{
if(x < 0)
{
putchar('-');
x = -x;
}
if(x > 9)
{
print(x / 10);
}
putchar(x % 10 + '0');
} int main() {
scanf("%d%d",&n,&m);
for(int i = 0;i <= n;++ i)
read(a[i],b[i]);
int cnt = 0;
for(int i = 1;i <= m;++ i)
if(calc(i) && calc1(i)) ++ cnt,vis[i] = true;
printf("%d\n",cnt);
for(int i = 1;i <= m;++ i)
if(vis[i]) print(i),puts("");
return 0;
}

luogu2312 解方程 (数论,hash)的更多相关文章

  1. LOJ2503 NOIP2014 解方程 【HASH】

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

  2. NOIP2014 uoj20解方程 数论(同余)

    又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, ...

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

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

  4. BZOJ3751 NOIP2014 解方程(Hash)

    题目链接  BZOJ3751 这道题的关键就是选取取模的质数. 我选了4个大概几万的质数,这样刚好不会T 然后统计答案的时候如果对于当前质数,产生了一个解. 那么对于那些对这个质数取模结果为这个数的数 ...

  5. $Noip2014/Luogu2312$ 解方程

    $Luogu$ $Sol$ 枚举解+秦九韶公式计算+取模. $Code$ #include<iostream> #include<cstdio> #include<cst ...

  6. [luogu2312] 解方程

    题面 ​ 秦九韶公式 ​ 看了上面这个之后大家应该都会了, 就是读入的时候边读入边取模, 从\(1\)到\(m\)间将每一个数带进去试一下就可以了, 复杂度是\(O(nm)\)的. ​ 古人的智慧是无 ...

  7. codevs3732==洛谷 解方程P2312 解方程

    P2312 解方程 195通过 1.6K提交 题目提供者该用户不存在 标签数论(数学相关)高精2014NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录   题目描述 已知多项式方程: a ...

  8. 洛谷 P2312 解方程 题解

    P2312 解方程 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 [1,m][1,m] 内的整数解(\(n\) 和 \(m\) 均为 ...

  9. [noip2014]P2312 解方程

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

随机推荐

  1. IT兄弟连 JavaWeb教程 Servlet会话跟踪 经典案例

    案例需求:编写一个servlet,可以向session中存放一个消息,再编写一个servlet可以从session取得session中存放的这个消息. 案例实现: package com.xdl.se ...

  2. 单片机的C语言中位操作用法2

    单片机的C语言中位操作用法 在对单处机进行编程的过程中,对位的操作是经常遇到的.C51对位的操控能力是非常强大 的.从这一点上,就可以看出C不光具有高级语言的灵活性,又有低级语言贴近硬件的特点. 这也 ...

  3. 嵌入式C语言模块编写

    C 语言源文件 *.c 理想的模块化应该可以看成是一个黑盒子.即我们只关心模块提供的功能,而不管模块内部的实现细节.在大规模程序开发中,一个程序由很多个模块组成,这些模块的编写任务被分配到不同的人,编 ...

  4. win10无法写入删改c盘文件的解决方法

    前言 最近使用了win10系统,结果发现无法对c盘的文件进行写入删改,在网上到处搜集资料,终于找到了解决方法,这里总结一下. 首先,本文针对的是win10家庭版,家庭版默认是不提供组策略功能,而我们需 ...

  5. 自定义UIButton 实现图片和文字 之间距离和不同样式

    喜欢交朋友的加:微信号 dwjluck2013 1.UIButton+ImageTitleSpace.h #import <UIKit/UIKit.h> // 定义一个枚举(包含了四种类型 ...

  6. djangoForm组件

    https://www.cnblogs.com/jabbok/p/9273786.html 在之前学习了html form信息传递到django,然后进行处理,但是这很不方便. django有自己的组 ...

  7. [软件工程基础]PhyLab 功能规格说明书

    前言 Sigma 团队想要在 PhyLab 上做的增量改进见需求分析.六个功能中只有题库和图文流程需要对界面进行大的改动,剩下的功能在用户看来仅仅是在原有界面上有内容上的扩充,因此不在功能规格说明书的 ...

  8. python学习之队列

    import queue task_queue = queue.Queue() #创建队列

  9. python学习之调试:

    编写的代码不会都能完好运行,所以需要调试,解决错误和异常,常有几种方法: 1 通过printf()来打印信息.但在发布时无法删除: 2 通过assert 条件表达式,‘提示信息’:启动解释器时通过 - ...

  10. asp.net网页跳转

    1.Response.Redirect("http://www.bcbbs.net",false);    目标页面和原页面可以在2个服务器上,可输入网址或相对路径.后面的bool ...