zoukankan      html  css  js  c++  java
  • cf(#div1 B. Dreamoon and Sets)(数论)

    B. Dreamoon and Sets
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Dreamoon likes to play with sets, integers and . is defined as the largest positive integer that divides both a and b.

    Let S be a set of exactly four distinct integers greater than 0. Define S to be of rank k if and only if for all pairs of distinct elements si, sj from S, .

    Given k and n, Dreamoon wants to make up n sets of rank k using integers from 1 to m such that no integer is used in two different sets (of course you can leave some integers without use). Calculate the minimum m that makes it possible and print one possible solution.

    Input

    The single line of the input contains two space separated integers n, k (1 ≤ n ≤ 10 000, 1 ≤ k ≤ 100).

    Output

    On the first line print a single integer — the minimal possible m.

    On each of the next n lines print four space separated integers representing the i-th set.

    Neither the order of the sets nor the order of integers within a set is important. If there are multiple possible solutions with minimal m, print any one of them.

    Sample test(s)
    Input
    1 1
    Output
    5
    1 2 3 5
    Input
    2 2
    Output
    22
    2 4 6 22
    14 18 10 16
    Note

    For the first example it's easy to see that set {1, 2, 3, 4} isn't a valid set of rank 1 since .

    题意: 给你任意n,k,要你求出n组gcd(si,sj)=k的四个元素的组合.........

    其实对于gcd(a,b)=k,我们只需要求出gcd(a,b)=1;然后进行gcd(a,b)*k=k;

    不难发现这些数是固定不变的而且还有规律可循,即1,2,3,5    7 8 9 11   13 14 15 17   每一个段直接隔着2,段内前3个连续,后一个隔着2.....

    代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 using namespace std;
     4 const int maxn=10005;
     5 __int64 ans[maxn][4];
     6 void work()
     7 {
     8    __int64 k=1;
     9   for(int i=0;i<10000;i++)
    10   {
    11       ans[i][0]=k++;
    12       ans[i][1]=k++;
    13       ans[i][2]=k++;
    14       ans[i][3]=++k;
    15       k+=2;
    16   }
    17 }
    18 int main()
    19 {
    20   int n,k;
    21   work();
    22   while(scanf("%d%d",&n,&k)!=EOF)
    23   {
    24       printf("%I64d
    ",ans[n-1][3]*k);
    25       for(int i=0;i<n;i++)
    26         printf("%I64d %I64d %I64d %I64d
    ",ans[i][0]*k,ans[i][1]*k,ans[i][2]*k,ans[i][3]*k);
    27   }
    28  return 0;
    29 }
    View Code
  • 相关阅读:
    微信获取openid过滤黑名单_写入文件_多协程版5500条10几秒
    微信获取openid写入文件golang版_golang获取微信openid写入文件
    go开发桌面应用源码_go Socket_golang Socket_golang开发桌面应用源码_go客户端服务端
    go常用代码片段_golang常用代码
    go基本语法_golang基本语法
    Java常用集合-List(ArrayList、Vector和LinkedList)简介
    mysql sql 将性别1和2转换成女和男
    支付宝当面付Demo测试
    PageResult
    返回结果
  • 原文地址:https://www.cnblogs.com/gongxijun/p/4025638.html
Copyright © 2011-2022 走看看