zoukankan      html  css  js  c++  java
  • 2014D2T3 解方程

    2014D2T3 解方程

    problem

    求方程(a_0+a_1x+a_2x^2+...+a_nx^n=0)([1,m])内的整数解。

    solution

    秦九韶算法。大数取模。
    秦九韶算法

    code

    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    #include <iostream>
    using namespace std;
    int read(){
    	int a=0,op=1;char c=getchar();
    	while(c>'9'||c<'0') {if(c=='-') op=-1;c=getchar();}
    	while(c>='0'&&c<='9'){a*=10,a+=c^48,c=getchar();}
    	return a*op;
    }
    //带取模的快读
    const int maxn=1e6+5;
    const int mod=1e9+7;
    long long n,m,ans,cnt,sum=0;
    int A[105],key[maxn];
    bool t=true;//用来判断是否有解
    long long fastread(){
    	long long a=0,op=1;
    	char c=getchar();
    	while(c<'0'||c>'9'){if(c=='-') op=-1;c=getchar();}
    	while(c>='0'&&c<='9'){a=(a*10+c-'0')%mod;c=getchar();}
    	return a*op;
    }
    bool calc(long long x){
    	sum=0;//!
    	for(long long i=n;i>=1;i--) sum=((A[i]+sum)*x)%mod;//秦九韶算法,A[0]不需要乘x
    	sum=(sum+A[0])%mod;
    	return !sum;//如果答案是0说明x为多项式的解,返回1
    }
    int main(){
    	n=fastread();m=fastread();
    	//printf("%lld %lld",n,m);
    	for(long long i=0;i<=n;i++) A[i]=fastread();
    	for(long long i=1;i<=m;i++){
    		if(calc(i)){
    			//有解
    			t=false;
    			ans++;
    			key[++cnt]=i;
    		}
    	}
    	if(t){//ans=0
    		printf("%lld",ans);
    		return 0;
    	}
    	printf("%lld
    ",ans);
    	for(long long i=1;i<=cnt;i++){
    		printf("%d
    ",key[i]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    PHP计算近1年的所有月份
    mysql的索引和锁
    深度解析 https 协议
    linux 常用命令大全
    为什么Python3.6字典变得有序了?
    oddo
    RESTful接口开发规范
    python中的 __inti__ 和 __new__ 方法的区别
    十大经典算法 Python实现
    MongoDB journal 与 oplog,究竟谁先写入?--转载
  • 原文地址:https://www.cnblogs.com/liuziwen0224/p/2014d2t3.html
Copyright © 2011-2022 走看看