POJ_1012 Joseph

問題
解法
カンニングした
配列を作って、コピペする。
配列作成用

#include <cstdio>
using namespace std;

int a[14];

bool c(int k, int m){
	int i = 0, p;
	for(p = 2 * k; p > k; p--){
		i = (i + m - 1) % p;
		if(i < k) return false;
	}
	return true;
}
int main(){
	for(int k = 1; k <= 14; k++){
		for(int i = 1; ;i++){
			if(c(k, i)){
				a[k] = i;
				break;
			}
		}
	}
	for(int i = 1; i < 14; i++)
		printf("%d,\n", a[i]);
	return 0;
}
#include <cstdio>
using namespace std;

int a[] = {
0,
2,
7,
5,
30,
169,
441,
1872,
7632,
1740,
93313,
459901,
1358657,
2504881,
};

int main(){
	int n;
	while(scanf("%d", &n) && n){
		printf("%d\n", a[n]);
	}
	return 0;
}