首页 > 其他 > 详细

【刷题】【秦九昭式】解方程

时间:2019-11-08 15:54:20      阅读:74      评论:0      收藏:0      [点我收藏+]

将复杂乘法改为线性加法,程序跑的飞快

高精度范围的操作,只需要判断相等之类的,可以直接去mod大质数,或者多mod几个都行

 

#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
const int p=1000000007;
int n,m,ans,sum;
int A[103],key[1000003];
ll read()
{
    ll sum=0,fg=1;
    char c=getchar();
    while(c < 0 || c > 9)
    {
        if(c==-) fg=-1;
        c=getchar();
    }
    while(c >=0 && c <=9)
    {
        sum=((sum*10)+c-0)%p;
        c=getchar();
    }
    return sum*fg;
}
void print(int x)
{
    if(x<0)
        putchar(-),x=-x; 
    if(x>9)
        print(x/10);
    putchar(x%10+0);
}
bool calc(ll x)
{
    sum=0;
    for(ll i=n;i>=1;i--)
        sum=((A[i]+sum)*x)%p;
    sum=(sum+A[0])%p;
    return !sum;
}
int main()
{
    n=read();
    m=read();
    for(ll i=0;i<=n;i++)
        A[i]=read();
    for(ll i=1;i<=m;i++)
        if(calc(i))
            key[++ans]=i;
    if(!ans)
        cout<<"0"<<endl;
    else
    {
        print(ans);
        putchar(\n);
        for(ll i=1;i<=ans;i++)
        {
            print(key[i]);
            putchar(\n);
        }
    }
    return 0;
}

 

【刷题】【秦九昭式】解方程

原文:https://www.cnblogs.com/xwww666666/p/11820697.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!