>>396 Cにて
#include<stdio.h>
#include<string.h>
#define DATA_NUM_MAX 20
int gcd(int a, int b){
int c;
while((c=a%b)) a=b, b=c;
return b;
}
void func(int result[], int work[], int result_num, int rest_num, int maximum, int minimum){
int i, value;
for(value=maximum;value>=minimum;value--){
for(i=result_num;i>rest_num;i--) if(gcd(work[i-1], value)>1) break;
if(i<=rest_num){
work[rest_num-1]=value;
if(rest_num==1) memcpy(result, work, sizeof(int)*result_num);
else func(result, work, result_num, rest_num-1, value-1, minimum);
}
}
}
int main(void){
int m=10, n=15, i, j, k, data[DATA_NUM_MAX], result[DATA_NUM_MAX];
if(n<=0 || n>DATA_NUM_MAX) return 1;
for(i=m,k=0;k<n;i++){
for(j=0;j<k;j++) if(gcd(result[j], i)>1) break;
if(j>=k) result[k++]=i;
}
func(result, data, n, n, result[n-1]-1, m);
printf("m=%d n=%d\n%d", m, n, result[0]);
for(i=1;i<n;i++) printf(", %d", result[i]);
return 0;
}