zoukankan      html  css  js  c++  java
  • CF1010C

    题目链接

    题目描述

    (left( a_{1}x_{1}+a_{2}x_{2}+ldots +a_{n}x_{n} ight) \% k) 的值情况数.
    (ai,xi均为非负整数)

    输入输出格式

    输入格式:

    第一行两个整数n,k
    第二行n个整数a1...an
    (1<=n,k<=100000)
    (1<=ai<=1e9)

    输出格式:

    第一行输出一个整数,表示情况数
    第二行升序输出一个序列,表示可能出现的值

    样例

    输入样例 输出样例
    2 8 12 20 2 0 4
    3 10 10 20 30 1 0

    思路

    1.数论

    设d=(left( a_{1}x_{1}+a_{2}x_{2}+ldots +a_{n}x_{n} ight) \% k)
    则d=$ a_{1}x_{1}+a_{2}x_{2}+ldots +a_{n}x_{n}-ky$ (y为非负整数)
    又因为在ai,xi为整数的情况下d的值只可能为$ gcd left( a_{1}ldots a_{n},k ight) $ 的倍数
    所以先计算$ gcd left( a_{1}ldots a_{n},k ight) $
    然后计算结果就可以了
    证明请见欧几里得算法与扩欧

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <list>
    #include <set>
    #include <map>
    #define ll long long
    #define ull unsigned long long
    #define ci const int&
    #define cl const long long&
    #define cul const undigned long long&
    #define io_f std::ios::sync_with_stdio(false)
    using namespace std;
    
    int n,k;
    
    int gcd(ci x,ci y) {return y==0?x:gcd(y,x%y);}
    
    int main() {
    	io_f;
    	int a,x;
    	cin>>n>>k;
    	x=k;
    	for(int i=1;i<=n;i++) {
    		cin>>a;
    		x=gcd(x,a);
    	}
    	cout<<k/x<<endl;
    	for(int i=0;i<k;i+=x) cout<<i<<endl;
    
    	return 0;
    }
    
  • 相关阅读:
    WebStorm使用Vue
    hive的简单操作
    hbase的简单操作
    CentOS 7 配置hadoop(五) 配置sqoop(伪分布)
    CentOS7配置hadoop集群
    CentOS 7 配置hadoop(四) 配置hive(伪分布)
    CentOS 7 配置hadoop(三) 配置hbase(伪分布)
    五种变量创建的方法
    GO练习题
    第一次作业总结
  • 原文地址:https://www.cnblogs.com/ullio/p/9393751.html
Copyright © 2011-2022 走看看