秦九韶算法

P2312解方程

 求解在[ 1 , m ]范围内的解

需要使用到一个算法

秦九韶算法:代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 typedef long long ll;
 5 const int p=1e9+7;
 6 ll A[1000005];
 7 ll ans[103];
 8 ll py=0;
 9 ll n,m;
10 
11 inline ll Read()
12 {
13     ll sum=0,key=1;
14     char c=getchar();
15     while(c<'0' || c>'9')
16     {
17         if(c == '-') key=-1;
18         c=getchar();
19     }
20     while(c>='0' && c<='9') sum=((sum * 10) + c - '0')%p,c=getchar();
21     return sum*key;
22     
23 }
24 
25 inline void print(ll x)
26 {
27     if(x<0) putchar('-'),x=-x;
28     if(x>9)
29     {
30         print(x/10);
31     }
32     putchar(x%10+'0');
33 }
34 
35 inline bool HA(ll x)
36 {
37     ll sum=0;
38     for(ll i=n;i>=1;i--)
39         sum=((A[i]+sum) * x) % p;
40     sum=(sum+A[0])%p;
41     return !sum;
42 }
43 
44 int main() 
45 {
46     int cnt=0;
47     int aux=true;
48     n=Read();
49     m=Read();
50     for(ll i=0;i<=n;i++)
51         A[i]=Read();
52     for(ll i=1;i<=m;i++)
53     {
54         if(HA(i))
55         {
56             cnt++;
57             ans[++py]=i;
58             aux=false;
59         }
60     }
61     if(aux==true)
62     {
63         cout<<cnt;
64         return 0;
65     }
66     print(cnt);
67     cout<<'
';
68     for(ll i=1;i<=py;i++)
69     {
70         print(ans[i]);
71 //        cout<<ans[i];
72         cout<<'
';
73     }
74     return 0;
75 }

-end-

原文地址:https://www.cnblogs.com/-Iris-/p/12823259.html