luogu2312 解方程 (数论,hash)
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)的更多相关文章
- LOJ2503 NOIP2014 解方程 【HASH】
LOJ2503 NOIP2014 解方程 LINK 题目大意就是给你一个方程,让你求[1,m]中的解,其中系数非常大 看到是提高T3还是解方程就以为是神仙数学题 后来研究了一下高精之类的算法发现过不了 ...
- NOIP2014 uoj20解方程 数论(同余)
又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, ...
- 【bzoj3751】[NOIP2014]解方程 数论
题目描述 已知多项式方程: a0+a1*x+a2*x^2+...+an*x^n=0 求这个方程在[1,m]内的整数解(n和m均为正整数). 输入 第一行包含2个整数n.m,每两个整数之间用一个空格隔开 ...
- BZOJ3751 NOIP2014 解方程(Hash)
题目链接 BZOJ3751 这道题的关键就是选取取模的质数. 我选了4个大概几万的质数,这样刚好不会T 然后统计答案的时候如果对于当前质数,产生了一个解. 那么对于那些对这个质数取模结果为这个数的数 ...
- $Noip2014/Luogu2312$ 解方程
$Luogu$ $Sol$ 枚举解+秦九韶公式计算+取模. $Code$ #include<iostream> #include<cstdio> #include<cst ...
- [luogu2312] 解方程
题面 秦九韶公式 看了上面这个之后大家应该都会了, 就是读入的时候边读入边取模, 从\(1\)到\(m\)间将每一个数带进去试一下就可以了, 复杂度是\(O(nm)\)的. 古人的智慧是无 ...
- 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\) 均为 ...
- [noip2014]P2312 解方程
P2312 解方程 其实这道题就是求一个1元n次方程在区间[1, m]上的整数解. 我们枚举[1, m]上的所有整数,带进多项式中看看结果是不是0即可. 这里有一个技巧就是秦九韶算法,请读者自行查看学 ...
随机推荐
- Mol Cell Proteomics. |陈洁| 整合鸟枪法蛋白质组学中鉴定和定量的错误率
大家好,本周分享的是发表在MCP上的一篇关于鸟枪蛋白质组学中的错误率的文章,题目是Integrated identification and quantification error probabil ...
- C#字体字号的改变
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- 密码破解工具John the Ripper使用说明
John the Ripper John 包描述 John the Ripper 既功能丰富又运行快速. 它在一个程序中结合了几种破解模式,并且可以根据您的特定需求进行全面地配置(你甚至可以使用支持C ...
- 【BZOJ1122】[POI2008] 账本BBB
→传送门← 正解: 贪心加单调队列优化 先粘贴一张别人写的被老师发下来给我们的题解(就是看着这张题解才写出来的) 下面是自己的话(一些具体操作过程): 把环拆成一条2*n的链,然后用优先队列来求出每一 ...
- C#递归得到特定文件夹下问件
List<String> listFile = new List<String>(); public void director(string path) { //绑定到指定的 ...
- log日志中不打印异常栈的具体信息
问题与分析 最近在查项目的log时发现报了大量的NPE(NullPointerException),诡异的是只log了Exception的类名,却没有具体的堆栈信息,以致于无法对该NPE异常进行准确定 ...
- Java反编译工具JD-GUI以及Eclipse的反编译插件
什么是反编译 高级语言源程序经过编译变成可执行文件,反编译就是逆过程.但是通常不能把可执行文件变成高级语言源代码,只能转换成汇编程序. 反编译是一个复杂的过程,所以越是高级语言,就越难于反编译,但目前 ...
- Java | 基础归纳 | 随机数应用
Java中一般有两种随机数,一个是Math中random()方法,一个是Random类. Math.random();//返回0~1的中随机数值 Random random = new Random( ...
- sql server之exists用法
- bzoj2818: Gcd懵逼乌斯反演
由于是单组数据,强行不分块O(n)过 线性筛部分非常神奇,用了一个奇妙的推导(懒得写了) #include <bits/stdc++.h> using namespace std; ],f ...