题目描述

已知多项式方程:

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

代码

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #define ll long long
 6 using namespace std;
 7
 8 ll v[555],a[555],ans,N,M,p;
 9
10 ll pow(ll x,ll n){
11     ll ans=1;
12     while(n){
13         if(n&1) ans=ans*x;
14         x=x*x;
15         n>>=1;
16     }
17     return ans;
18 }
19
20 ll cc(ll x){
21     ll ans=a[0];
22     for(ll i=1;i<=N;i++){
23         ans+=a[i]*pow(x,i);
24     }
25     if(ans==0) {
26         v[++p]=x;
27         return 1;
28     }
29     return 0;
30 }
31
32 int main(){
33 //    freopen("equation.in","r",stdin);
34 //    freopen("equation.out","w",stdout);
35
36
37     scanf("%lld%lld",&N,&M);
38     for(ll i=0;i<=N;i++){
39         scanf("%lld",&a[i]);
40     }
41
42     for(ll i=1;i<=M;i++){
43         if(cc(i)) ++ans;
44     }
45
46     printf("%lld\n",ans);
47     for(ll i=1;i<=p;i++) printf("%lld\n",v[i]);
48
49     return 0;
50 }

不会写,水过了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左右就完全没有问题。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cstdlib>
 6 using namespace std;
 7 #define PROB "equation"
 8 #define MAXN 1100001
 9 ifdef WIN32
10
11 #define LL "%I64d"
12 #else
13 #define LL "%lld"
14 #endif
15 typedef long long qword;
16 const int mod[5] =
17 {22861,22871,22877,22901,22907
18 };
19 int a[11][110];
20 bool ok[MAXN];
21 bool ok2[5][30000];
22 char s[10010];
23 int n,m;
24 void work();
25 int main()
26 {
27         int ii,i,j, k;
28         int x;
29         scanf("%d%d\n",&n,&m);
30         int ll = 4;
31         for (ii=0;ii<=n;ii++)
32         {
33         //        scanf("%s", s);
34                 fgets(s,sizeof(s),stdin);
35                 int l = strlen(s)-1;
36                 if((s[l-1]<'0' || s[l-1]>'9') && s[l-1]!='-')l--;
37                 for(int j = 0; j < ll; j ++){
38                         int pmod = mod[j];
39                         a[j][ii] =0;
40                         x=1;
41                         k=0;
42                         if (s[k]=='-')k++,x=-x;
43                         else if (s[k]=='+')k++;
44                         for (;k<l;k++)
45                         {
46                                 a[j][ii]=(a[j][ii]*10+s[k]-'0')%pmod;
47                         }
48                         a[j][ii]=a[j][ii]*x%pmod;
49                         if(a[j][ii] < 0)
50                             a[j][ii] += pmod;
51                 }
52         }
53         memset(ok,1,sizeof(ok));
54         memset(ok2,1,sizeof(ok2));
55         int pmod;
56         int ans;
57         for (ii=0;ii<ll;ii++)
58         {
59                 pmod=mod[ii];
60                 for (i=0;i<pmod;i++)
61                 {
62                         ans=0;
63                         for (j=n;j>=0;j--)
64                         {
65                                 ans=(ans * i + a[ii][j])%pmod;
66                         }
67                         if (ans)
68                         {
69                                 ok2[ii][i]=false;
70                         }
71                 }
72         }
73         int cnt = 0;
74         for (int i=1;i<=m && cnt <= n;i++)
75         {
76                 for (int j=0;j<ll;j++)
77                 {
78                         if (!ok2[j][i%mod[j]]){
79                                 ok[i]=false;
80                                 break;
81                         }
82                 }
83                 if(ok[i])
84                     ++ cnt;
85         }
86         printf("%d\n",cnt);
87         for (i=1;i<=m;i++)
88                 if (ok[i])
89                         printf("%d\n",i);
90         return 0;
91 }

转载于:https://www.cnblogs.com/radiumlrb/p/6027898.html

NOIp 2014 #5 解方程 Label:数论?相关推荐

  1. 洛谷 题解 P2312 【解方程】

    Problem P2312 [解方程] >>> record 用时: 1166ms 空间: 780KB(0.76MB) 代码长度: 2.95KB 提交记录: R9909587 > ...

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

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

  3. python用tkinter及sympy解方程

    sympy是一个库,需自己下载 pip install sympy 导入库: from sympy import * import tkinter as tk from tkinter.message ...

  4. python解复杂方程_Python数据处理篇之Sympy系列(五)---解方程

    前言 sympy不仅在符号运算方面强大,在解方程方面也是很强大. 本章节学习对应官网的:Solvers 官方教程 (一)求解多元一次方程-solve() 1.说明: 解多元一次方程可以使用solve( ...

  5. java2的7次方怎么表示_python编程解方程第二弹:10行代码解二次方程(纯字符)...

    用纯字符串格式来记录二次方程: '3x^2-10x-8=0' 'x^2-2x+1=0' '3x^2+14x+8=0' 'x^2=9' 二次方怎么表示呢?比如上面的^表示法,或者是python风格的** ...

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

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

  7. 10.24T3 解方程 取模意义下运算+秦九韶算法

    #1228 解方程 描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入 输入共n + 2 行. 第一行包含2 ...

  8. 洛谷P2312 解方程题解

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

  9. 重根迭代法解方程(两种方法)(Python实现)

    简述 通过两种不同的重根迭代的来解方程. 处理的方程是 (sin(x) - x/2) ^2 = 0 代码 采用的第一种迭代重根迭代方法: xk+1=xk−mf(xk)f′(xk)xk+1=xk−mf( ...

  10. 【PC工具】如何简单粗暴无脑的解方程

    都2020年了(二十一世纪快中叶了): 信息时代这么多年了,已经进入云计算时代了: 电脑都会下围棋了: 火箭都能回收了: ... 那么 问题就来了:我们是不是还要用手解方程呢?电脑能不能给爷(我)解方 ...

最新文章

  1. centos7 选定默认启动内核,及删除无用内核
  2. ODBC API 学习总结
  3. 直播预告丨聚焦银行数字化运营体系搭建,助力银行构建核心竞争力
  4. idea中提交mapper.xml到svn后代码变灰色
  5. eclipse无法添加Tomcat7
  6. WriteableBitmap process summary
  7. 字符串内置方法 第二弹
  8. Qcon大会上电子工业出版社博文视点提供全程技术图书支持
  9. 基于京东家电商品知识图谱的自动问答系统(三) -- Java实现问答系统
  10. java模式:深入单例模式
  11. 通信算法之三十五:GMSK/MSK/CPFSK/CPM/FSK仿真链路
  12. ELK之Kibana入门及使用
  13. (转)Django新手需要注意的10个要点
  14. 目标板(linux)与PC 网卡 直连(TFTP)
  15. 监控 - Prometheus监控
  16. 深圳金融展 聚焦明朝万达数据防泄密
  17. 学科实践活动感悟50字_学科实践活动写实记录50字范文
  18. Apache服务器配置默认首页文件名和网站路径
  19. 倍福--和第三方触摸屏连接失败分析
  20. 基于屌丝青年网样式二次开发的WordPress主题:LIiu-One主题

热门文章

  1. list转换为map
  2. 组队开发第二周第五次会议
  3. android无法创建AVD了?
  4. 使用easy_install安装BeautifulSoup——Python
  5. SAStruts中文文档
  6. 嵌入式学习流程(参考一)
  7. BABOK - BA计划和监控(BA Planning Monitoring)概要
  8. JAVA-JVM调优标志
  9. [2017浙工大之江学院决赛 H] qwb与学姐(并查集,按秩合并,最小生成树,LCA)...
  10. First flight, Let's do it!