题目描述

已知多项式方程:

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

输入

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

输出

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

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

样例输入

2 10
2
-3
1

样例输出

2
1
2


题解

真心不难的数论题

首先高精度FFT肯定是不可取的,那么就必须取模。但是只有1个模数极有可能多解,所以多选几个大质数模数,如果左边的式子对所有模数取模都为0,则几乎可以判定为原方程的解。

但是这样时间复杂度为$O(nmt)$,其中t是模数个数,会TLE。

我们设$f(i,j)$表示当左面的一坨的x=i时对j取模得到的数,那么显然$f(i,j)=f(i+j,j)=f(i+2j,j)=...$。

所以我们只需要处理0~j-1的数即可,剩下的直接根据前面的推出来。

这样的时间复杂度为$O(t(np+m))$,其中p为模数大小。

所以p不能太大,但是太小也会影响答案正确性,所以取20000左右的质数最合适。

Tip1:bzoj里的1010000指的是1010000,所以a是高精度数(卡在这里无数次qaq)

Tip2:bzoj这道题加强了(加多了)数据,要数据后发现有40个点,但是时间依然是10s,所以常数卡得很死,不能使用long long,模数最好只有3个等等。

#include <cstdio>
#include <cstring>
const int tot = 3;
int prime[3] = {20029 , 22277 , 23333};
int n , m , a[1000010][3] , ok[100010] , cnt[1000010];
char str[1000010];
bool judge(int x , int p)
{
int i , sum = 0;
for(i = n ; ~i ; i -- )
sum = ((sum * x % prime[p] + a[i][p]) % prime[p] + prime[p]) % prime[p];
return !sum;
}
void read(int c)
{
scanf("%s" , str);
int i , j , flag = 1 , l = strlen(str);
if(str[0] == '-')
{
flag = -1;
for(i = 0 ; i < l ; i ++ ) str[i] = str[i + 1];
l -- ;
}
for(i = 0 ; i < tot ; i ++ )
{
int sum = 0;
for(j = 0 ; j < l ; j ++ ) sum = (sum * 10 + str[j] - '0') % prime[i];
a[c][i] = sum * flag;
}
}
int main()
{
int i , j , num = 0;
scanf("%d%d" , &n , &m);
for(i = 0 ; i <= n ; i ++ ) read(i);
for(i = 0 ; i < tot ; i ++ )
{
memset(ok , 0 , sizeof(ok));
for(j = 0 ; j < prime[i] ; j ++ )
if(judge(j , i))
ok[j] = 1;
for(j = 1 ; j <= m ; j ++ ) cnt[j] += ok[j % prime[i]];
}
for(i = 1 ; i <= m ; i ++ )
if(cnt[i] == tot)
num ++ ;
printf("%d\n" , num);
for(i = 1 ; i <= m ; i ++ )
if(cnt[i] == tot)
printf("%d\n" , i);
return 0;
}

【bzoj3751】[NOIP2014]解方程 数论的更多相关文章

  1. [BZOJ3751][NOIP2014] 解方程

    Description 已知多项式方程:a0+a1*x+a2*x^2+...+an*x^n=0 求这个方程在[1,m]内的整数解(n和m均为正整数).   Input 第一行包含2个整数n.m,每两个 ...

  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. BZOJ3751 NOIP2014 解方程(Hash)

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

  4. [BZOJ3751][NOIP2014]解方程(数学相关+乱搞)

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

  5. 【秦九韶算法】【字符串哈希】bzoj3751 [NOIP2014]解方程

    在模意义下枚举m进行验证,多设置几个模数,而且小一些,利用f(x+p)%p=f(x)%p降低计算次数.UOJ AC,bzoj OLE. #include<cstdio> #include& ...

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

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

  7. BZOJ 3751: [NOIP2014]解方程 数学

    3751: [NOIP2014]解方程 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3751 Description 已知多项式方程: ...

  8. LOJ2503 NOIP2014 解方程 【HASH】

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

  9. luogu2312 解方程 (数论,hash)

    luogu2312 解方程 (数论,hash) 第一次外出学习讲过的题目,然后被讲课人的一番话惊呆了. 这个题,我想着当年全国只有十几个满分.....然后他又说了句我考场A这道题时,用了5个模数 确实 ...

随机推荐

  1. 爬去酷狗top500的数据

    import requests from bs4 import BeautifulSoup import time headers={ #'User-Agent':'Nokia6600/1.0 (3. ...

  2. Java 集合框架_中

    Set接口 特点: [1]Set接口表示一个唯一.无序的容器(和添加顺序无关) Set接口常用实现类有 HashSet [1]HashSet是Set接口的实现类,底层数据结构是哈希表. [2]Hash ...

  3. 1968: C/C++经典程序训练6---歌德巴赫猜想的证明

    1968: C/C++经典程序训练6---歌德巴赫猜想的证明 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 1165  Solved: 499[Submi ...

  4. Spark集锦

    1 Spark官网  http://spark.apache.org/ 2 Spark书籍 http://down.51cto.com/tag-spark%E4%B9%A6%E7%B1%8D.html

  5. iperf安装与使用

    从官网下载相应版本. https://iperf.fr/iperf-download.php centos7 安装 rpm -i iperf3-3.1.3-1.fc24.x86_64.rpm ubun ...

  6. RestSharp使用备忘

    (1)一般调用: public static List<T> Execute<T>(string resourceUrl, object obj, out int totalN ...

  7. 括号匹配性检测C语言实现

    #include <stdio.h> #define SIMPLE_KUOHAO "(()1231qeqw)(@#$)" #define COMPLEX_KUOHAO ...

  8. 代码方式使用AutoLayout (NSLayoutConstraint + Masonry)

    随着iPhone6/6+设备的上市,如何让手头上的APP适配多种机型多种屏幕尺寸变得尤为迫切和必要.(包括:iPhone4/4s,iPhone5/5s,iPhone6/6s,iPhone 6p/6ps ...

  9. NOIP模拟赛 czy的后宫5

    描述 czy要召集他的妹子,但是由于条件有限,可能每个妹子不能都去,但每个妹子都有一个美丽值,czy希望来的妹子们的美丽值总和最大(虽然……). czy有一个周密的电话通知网络,它其实就是一棵树,根结 ...

  10. [51nod] 1301 集合异或和

    考虑不限制xor{Y}>xor{X} 考虑n=m的情况,每个数i∈[1,n]可以被分配到X集合或Y集合,或不分配 设f[S]表示{X} xor {Y} == S的方案数 有f[S]+=2*f[S ...