zoukankan      html  css  js  c++  java
  • 【 裴蜀定理 】Border

    • Step1 Problem

    原题 有n种类型的纸币,以十进制给出,每种纸币能无限使用,转换成k进制数,求有末尾的数有多少种可能。

    • Step2 Ideas:

    首先一个数转换成k进制数末尾的数为num%k, 由裴蜀定理可知 a1*x1 + a2*x2 +...+ an * xn = c 有整数解,必有c为gcd(a1, a2,...,an)的整数倍, 所以 最后结果就是 i*gcd % k  (0 <= i < k)不同数的集合。

    • Step3 Code:
     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<bitset>
     6 #include<cassert>
     7 #include<cctype>
     8 #include<math.h>
     9 #include<cstdlib>
    10 #include<ctime>
    11 #include<deque>
    12 #include<iomanip>
    13 #include<list>
    14 #include<map>
    15 #include<queue>
    16 #include<set>
    17 #include<stack>
    18 #include<vector>
    19 #define lt k<<1
    20 #define rt k<<1|1
    21 #define lowbit(x) x&(-x)
    22 #define lson l,mid,lt
    23 #define rson mid+1,r,rt
    24 using namespace std;
    25 typedef long long  ll;
    26 typedef long double ld;
    27 #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    28 #define mem(a, b) memset(a, b, sizeof(a))
    29 //#define int ll
    30 const double pi = acos(-1.0);
    31 const double eps = 1e-6;
    32 const double C = 0.57721566490153286060651209;
    33 const ll mod = 3e7;
    34 const int inf = 0x3f3f3f3f;
    35 const ll INF = 0x3f3f3f3f3f3f3f3f;
    36 const int maxn = 5e3 + 5;
    37 set<ll> se;
    38 
    39 int main() {
    40     int n, k;
    41     cin >> n >> k;
    42     int sum = 0;
    43     for (int i = 1; i <= n; i++) {
    44         int x;
    45         cin >> x;
    46         sum = __gcd(sum, x);
    47     }
    48     for (int i = 0; i < k; i++)  se.insert(((ll)i * sum) % k);
    49     cout << se.size() << endl;
    50     for (auto it : se) cout << it << ' ';
    51     return 0;
    52 }
  • 相关阅读:
    2月3日
    照片测试
    家属签证计时
    我来了
    090204 阴天
    重要提醒to 小爱
    小毛小毛
    C++Primer学习日程
    资料库字段存储文件记录的方式
    本日有点忙
  • 原文地址:https://www.cnblogs.com/zyysyang/p/11346999.html
Copyright © 2011-2022 走看看