zoukankan      html  css  js  c++  java
  • P2312 解方程

    P2312 解方程

    我借鉴了一下某位不愿透露姓名的丁大佬的代码,他讲了一遍。。。但是我并没有听懂

    这个题目呢我们用到了秦九韶算法

    把一个n次多项式
     
     
    改写成如下形式:
     
     
     
     
     
     
    求多项式的值时,首先计算最内层括号内一次多项式的值,即
     
     
     
    然后由内向外逐层计算一次多项式的值,即
     
     
     
     
     
    这样,求n次多项式f(x)的值就转化为求n个一次多项式的值。
     
    结论:对于一个n次多项式,至多做n次乘法和n次加法。

    代码:

    #include <cstdio>
    const long long Mod = (int)1e9 + 7;
    const int maxN = 100 + 5;
    const int maxM = (int)1e6 + 5;
    
    int N, M;
    int arr[maxN];
    
    void Fscan(int &tmpX) 
    {
    int Ch = getchar(), F = ' '; long long tmp = 0; while (Ch < '0' || Ch > '9')
    { F
    = Ch; Ch = getchar(); } while ('0' <= Ch && Ch <= '9')
    { tmp
    = ((tmp << 3) + (tmp << 1) + Ch - '0') % Mod; Ch = getchar(); } tmpX = (int)(F == '-' ? -tmp : tmp); } void Read()
    { scanf(
    "%d%d", &N, &M); for (int i = 0; i <= N; ++i) Fscan(arr[i]); } int T, Que[maxM]; long long Calc(const int &X)
    {
    long long Ans = 0; for (int i = N; i; --i) Ans = ((Ans + (long long)arr[i]) * (long long)X) % Mod; Ans = (Ans + (long long)arr[0]) % Mod; return Ans; } void Solve()
    {
    for (int i = 1; i <= M; ++i) if (!Calc(i)) Que[++T] = i; } int main() { Read(); Solve(); printf("%d ", T); for (int i = 1; i <= T; ++i) printf("%d ", Que[i]); return 0; }
  • 相关阅读:
    Linux date自己实现代码
    Linux常用指令
    awk getline命令
    文档资料记录
    数学之美番外篇:平凡而又神奇的贝叶斯方法
    最小二乘法(ZZ)
    SpringMVC简单使用教程
    Oracle设置序列方法
    Bootstrap Table的使用详解
    Html中div块居中显示
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/10667034.html
Copyright © 2011-2022 走看看