Esempio n. 1
0
int main() {
	freopen("A.in", "r", stdin);
	scanf("%d", &m);
	scanf("%d%d", &h.first, &a.first);
	scanf("%d%d", &x.first, &y.first);
	scanf("%d%d", &h.second, &a.second);
	scanf("%d%d", &x.second, &y.second);
	std::pair<int, int> rem;
	std::pair<int, int> mod;
	rem.first = getRem(h.first, a.first, x.first, y.first);
	rem.second = getRem(h.second, a.second, x.second, y.second);
	mod.first = getRem(a.first, a.first, x.first, y.first);
	mod.second = getRem(a.second, a.second, x.second, y.second);
	if (rem.first == -1 || rem.second == -1) {
		puts("-1");
		return 0;
	}
	if (mod.first == -1 && mod.second == -1) {
		if (rem.first == rem.second) printf("%d\n", rem.first);
		else puts("-1");
	}
	else if (mod.first == -1) {
		// rem.first = rem.second + k * mod.second
		if (rem.first < rem.second || ((rem.first - rem.second) % mod.second)) puts("-1");
		else printf("%d\n", rem.first);
	}
	else if (mod.second == -1) {
		if (rem.second < rem.first || ((rem.second - rem.first) % mod.first)) puts("-1");
		else printf("%d\n", rem.second);
	}
	else{
		for (int i = 0; i < m; i++) {
			long long now = (long long) mod.first * i;
			now = (now + rem.first);
			map[now] = true;
		}
		long long answer = 1ll << 50;
		for (int i = 0; i < m; i++) {
			long long now = (long long)mod.second * i;
			now = (now + rem.second);
			if (map[now] && answer > now) {
				answer = now;
			}
		}
		if (answer == 1ll << 50) puts("-1");
		else std::cout << answer << std::endl;
	}
	return 0;
}
Esempio n. 2
0
void torus_mapping(void)
{
  tw_lpid kpid;
  tw_pe * pe;
  int nkp_per_pe=16;

  for(kpid = 0; kpid < nkp_per_pe; kpid++)
   tw_kp_onpe(kpid, g_tw_pe[0]);

  int i;
  for(i = 0; i < nlp_nodes_per_pe; i++)
   {
     kpid = i % g_tw_nkp;
     pe = tw_getpe(kpid % g_tw_npe);
     tw_lp_onpe(i, pe, g_tw_mynode * nlp_nodes_per_pe + i + getRem() );
     tw_lp_onkp(g_tw_lp[i], g_tw_kp[kpid]);
     tw_lp_settype(i, &nodes_lps[0]);
   }
  for(i = 0; i < nlp_mpi_procs_per_pe; i++)
   {
     kpid = i % g_tw_nkp;
     pe = tw_getpe(kpid % g_tw_npe);
     tw_lp_onpe(nlp_nodes_per_pe+i, pe, N_nodes + g_tw_mynode * nlp_mpi_procs_per_pe + i + getRem() );
     tw_lp_onkp(g_tw_lp[nlp_nodes_per_pe + i], g_tw_kp[kpid]);
     tw_lp_settype(nlp_nodes_per_pe + i, &nodes_lps[1]);
   }
}
Esempio n. 3
0
tw_lp * torus_mapping_to_lp( tw_lpid lpid )
{
    int index;

    if(lpid < N_nodes)
       index = lpid - g_tw_mynode * nlp_nodes_per_pe - getRem();
    else
       index = nlp_nodes_per_pe + (lpid - g_tw_mynode * nlp_mpi_procs_per_pe - N_nodes - getRem());

    return g_tw_lp[index];
}