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, sjfrom 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.
The single line of the input contains two space separated integers n, k (1 ≤ n ≤ 10 000, 1 ≤ k ≤ 100).
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.
1 1
5 1 2 3 5
2 2
22 2 4 6 22 14 18 10 16
For the first example it's easy to see that set {1, 2, 3, 4} isn't a valid set of rank 1 since .
题目意思:http://codeforces.com/problemset/problem/476/D
1-m中,四个数凑成一组,满足任意2个数的gcd=k,求一个最小的m使得凑成n组解。并输出。
很自然,把k先不管,那么xi/k就得互质,于是
1 2 3 4 5 6 7 8 9 10 11 12 13.。。。。。。。。。
互质的一组是 1 2 3 5、4 7 11 13、、、、
但是,1 2 3 5、7 8 9 11也是的,同时这组的解显然更优,因为数拉的不是很大。于是,于是,
1 2 3 5
7 8 9 11
13 14 15 17
。。。。。
规律就出来了。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#define rt return
#define sf scanf
#define pf printf
#define pi(n) pf("%d\n",n)
#define REP0(i,n) for(int i=0;i<(n);i++)
#define REP1(i,n) for(int i=1;i<=(n);i++)
#define REP(i,s,n) for(int i=s;i<=(n);i++)
#define db double
#define LL long long
#define op operator
#define INF 0x3fffffff
#define eps 1e-8
#define PI acos(-1)
#define maxn
using namespace std;
int main(){
#ifdef ACBang
// freopen("in.txt","r",stdin);
#endif
int n,k;
while(~sf("%d%d",&n,&k)){
pf("%d\n",(5*n+n-1)*k);
int ans=-5;
for(int i=1;i<=n;i++){
ans+=6;
pf("%d %d %d %d\n",ans*k,(ans+1)*k,(ans+2)*k,(ans+4)*k);
}
}
rt 0;
}
// 1 2 3 5
// 7 8 9 11
// 13 14 15 17
// 19 20 21 23