题目描述

已知多项式方程:

a0+a1x+a2x^2+..+anx^n=0

求这个方程在[1, m ] 内的整数解(n 和m 均为正整数)

输入输出格式

输入格式:

输入文件名为equation .in。

输入共n + 2 行。

第一行包含2 个整数n 、m ,每两个整数之间用一个空格隔开。

接下来的n+1 行每行包含一个整数,依次为a0,a1,a2..an

输出格式:

输出文件名为equation .out 。

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

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

输入输出样例

输入样例#1:

2 10
1
-2
1
输出样例#1:

1
1
输入样例#2:

2 10
2
-3
1
输出样例#2:

2
1
2
输入样例#3:

2 10
1
3
2
输出样例#3:

0

说明

30%:0<n<=2,|ai|<=100,an!=0,m<100

50%:0<n<=100,|ai|<=10^100,an!=0,m<100

70%:0<n<=100,|ai|<=10^10000,an!=0,m<10000

100%:0<n<=100,|ai|<=10^10000,an!=0,m<1000000

代码

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std; ll v[],a[],ans,N,M,p; ll pow(ll x,ll n){
ll ans=;
while(n){
if(n&) ans=ans*x;
x=x*x;
n>>=;
}
return ans;
} ll cc(ll x){
ll ans=a[];
for(ll i=;i<=N;i++){
ans+=a[i]*pow(x,i);
}
if(ans==) {
v[++p]=x;
return ;
}
return ;
} int main(){
// freopen("equation.in","r",stdin);
// freopen("equation.out","w",stdout); scanf("%lld%lld",&N,&M);
for(ll i=;i<=N;i++){
scanf("%lld",&a[i]);
} for(ll i=;i<=M;i++){
if(cc(i)) ++ans;
} printf("%lld\n",ans);
for(ll i=;i<=p;i++) printf("%lld\n",v[i]); return ;
}

不会写,水过了30分,QAQ

转载:

没有c++题解,果断来一发

50%数据:

从1到m暴力枚举答案,然后通过高精度进行计算。

70%数据:

仍然从1到m暴力枚举答案,但是我们不再进行高精度运算,而是模质数。为了减小冲突的几率,我们可以多选几个数字去模。这样时间复杂度是O(nmprime),其中prime是选取的质数的数量,选四五个就行。

100%数据:

如果我们模的数字是k。左边式子带入x和带入x+k是没有区别的。如果我们把质数k取得小一些,这样x就不用试1~m,而是试1~k。这样复杂度就变成了O(nkprime),如果k取10^4左右就完全没有问题。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
using namespace std;
#define PROB "equation"
#define MAXN 1100001
ifdef WIN32 #define LL "%I64d"
#else
#define LL "%lld"
#endif
typedef long long qword;
const int mod[] =
{,,,,
};
int a[][];
bool ok[MAXN];
bool ok2[][];
char s[];
int n,m;
void work();
int main()
{
int ii,i,j, k;
int x;
scanf("%d%d\n",&n,&m);
int ll = ;
for (ii=;ii<=n;ii++)
{
// scanf("%s", s);
fgets(s,sizeof(s),stdin);
int l = strlen(s)-;
if((s[l-]<'' || s[l-]>'') && s[l-]!='-')l--;
for(int j = ; j < ll; j ++){
int pmod = mod[j];
a[j][ii] =;
x=;
k=;
if (s[k]=='-')k++,x=-x;
else if (s[k]=='+')k++;
for (;k<l;k++)
{
a[j][ii]=(a[j][ii]*+s[k]-'')%pmod;
}
a[j][ii]=a[j][ii]*x%pmod;
if(a[j][ii] < )
a[j][ii] += pmod;
}
}
memset(ok,,sizeof(ok));
memset(ok2,,sizeof(ok2));
int pmod;
int ans;
for (ii=;ii<ll;ii++)
{
pmod=mod[ii];
for (i=;i<pmod;i++)
{
ans=;
for (j=n;j>=;j--)
{
ans=(ans * i + a[ii][j])%pmod;
}
if (ans)
{
ok2[ii][i]=false;
}
}
}
int cnt = ;
for (int i=;i<=m && cnt <= n;i++)
{
for (int j=;j<ll;j++)
{
if (!ok2[j][i%mod[j]]){
ok[i]=false;
break;
}
}
if(ok[i])
++ cnt;
}
printf("%d\n",cnt);
for (i=;i<=m;i++)
if (ok[i])
printf("%d\n",i);
return ;
}

NOIp 2014 #5 解方程 Label:数论?的更多相关文章

  1. NOIP 2014 D2T3 解方程 Hash大法好

    题目大意:给定高次方程an*x^n+...+a1*x^1+a0*x^0=0 求[1,m]区间内有多少个整数根 ai<=10^10000.m<=100W 懒得高精,考场上写的long dou ...

  2. 【UOJ #20】【NOIP 2014】解方程

    http://uoj.ac/problem/20 并不会做...然后看题解....... 对a取模,避免了高精度带来的复杂度,然后再枚举x判断是否满足模意义下等于0. 取5个模数,我直接抄的别人的_( ...

  3. 洛谷P2312 解方程 [noip2014] 数论

    正解:数论 解题报告: 这儿是,传送门qwq 又是很妙的一道题呢,专门用来对付我这种思维僵化了的傻逼的QAQ 首先看题目的数据范围,发现a<=1010000,很大的一个数据范围了呢,那这题肯定不 ...

  4. 2018.11.02 洛谷P2312 解方程(数论)

    传送门 直接做肯定会TLETLETLE. 于是考验乱搞能力的时候到了. 我们随便选几个质数来checkcheckcheck合法解,如果一个数无论怎么checkcheckcheck都是合法的那么就有很大 ...

  5. NOIp 2014 #3 寻找道路 Label:图论

    题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...

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

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

  7. vijos P1915 解方程 加强版

    背景 B酱为NOIP 2014出了一道有趣的题目, 可是在NOIP现场, B酱发现数据规模给错了, 他很伤心, 哭得很可怜..... 为了安慰可怜的B酱, vijos刻意挂出来了真实的题目! 描述 已 ...

  8. [NOIP2014]解方程

    3732 解方程  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 输入描述 Input Descrip ...

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

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

随机推荐

  1. 让那些为Webkit优化的网站也能适配IE10(转载)

    转载地址:http://www.w3cplus.com/css3/adapting-your-webkit-optimized-site-for-internet-explorer-10.html 特 ...

  2. .NET 在浏览器中下载TXT文件

    通常我们用浏览器打开Txt文件时候,浏览器会直接打开,我们想要txt下载到本地该怎么操作,用js也可以,单不能兼容所有的浏览器,所以我们可以在服务端做处理,代码如下: //TXT文件生成页面 publ ...

  3. [LeetCode] Rotate Image

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  4. js判断手机端Android手机还是iPhone手机

    /*判断当前设备是平板.安卓.苹果设备*/ <script type="text/javascript"> function fBrowserRedirect(){ v ...

  5. ServerSocket 默认邦定IP

    转自:http://cuisuqiang.iteye.com/blog/2037769 开发中需要开启服务端的时候,本地测试都是直接写端口,实际环境也是需要指定要邦定的IP才可以. 因为对于服务器来说 ...

  6. Effective C++ 之 Item 4:确定对象被使用前已先被初始化

    Effective C++ Chapter 1. 让自己习惯C++ (Accustoming Yourself to C++) Item 4. 确定对象被使用前已先被初始化 (Make sure th ...

  7. Liferay 6.2 改造系列之二十四:修改liferay密码的加密方式

    为了便于后期与Cas集成过程中使用数据库用户的方便,将liferay密码的加密方式改为SHA. 在/portal-master/portal-impl/src/portal.properties配置文 ...

  8. SpringRMI解析1-使用示例

    Java远程方法调用,即JavaRMI(JavaRemote Method Invocation),是Java编程语言里一种用于实现远程过程调用的应用程序编程接口.它使客户机上的运行的程序可以调用远程 ...

  9. MATLAB plot函数的一些参数

    直接从帮助文档中抓图,注意是颜色.线型什么的.

  10. DSP using MATLAB 示例Example3.22

    代码: % Discrete-time Signal x2(n) Ts = 0.001; n = -5:1:5; nTs = n*Ts; Fs = 1/Ts; x = exp(-1000*abs(nT ...