Pagini recente » Cod sursa (job #3185460) | Cod sursa (job #2027009) | Cod sursa (job #1927879) | Cod sursa (job #1927882) | Cod sursa (job #1415298)
#include <fstream>
#include <bitset>
#define DIM 210
using namespace std;
ifstream fin ("arbint.in" );
ofstream fout("arbint.out");
int N, val, cod, x, y, ok;
int A[DIM][DIM], i, j, nr, g, t, k, z;
bitset<8000010> F; int T[5];
void Cerinta_A(){
fin >> N >> val;
/*
CAUT PE CE NIVEL SE AFLA VAL
*/
i = 1; nr = 1;
while(val >= i + N * N){
i += N * N;
nr ++;
}
/*
AM 2 CAZURI:
- FAC SPIRALA DIN CENTRU
- FAC SPIRALA DE PE MARGINE
*/
x = nr;
if(nr % 2 == 1){
/*
ADICA DE PE MARGINE
*/
g = i;
t = 1;
}
else{
/*
ADICA DIN CENTRU
*/
g = i + N * N - 1;
t = -1;
}
for(k = 1; k <= N / 2; k ++){
for(j = k; j <= N-k+1; j ++){
A[k][j] = g;
g += t;
}
for(i = k+1; i <= N-k+1; i ++){
A[i][N-k+1] = g;
g += t;
}
for(j = N-k; j >= k; j --){
A[N-k+1][j] = g;
g += t;
}
for(i = N-k; i > k; i --){
A[i][k] = g;
g += t;
}
}
if(N % 2 == 1)
A[N/2+1][N/2+1] = g;
for(y = 1; y <= N; y ++){
for(z = 1; z <= N; z ++){
if(A[y][z] == val){
fout << x << " " << y << " " << z;
return;
}
}
}
return;
}
void Sieve(){
for(i = 4; i <= 8000000; i += 2)
F[i] = 1;
for(i = 3; i <= 8000000; i += 2){
if(F[i] == 0){
for(j = i + i + i; j <= 8000000; j += i + i)
F[j] = 1;
}
}
F[0] = F[1] = 1;
return;
}
void Cerinta_B(){
Sieve();
fin >> N >> val; nr = 1;
for(k = 1; k <= N * N * N; k += N * N){
if(nr % 2 == 1){
g = k;
for(j = 1; j <= N; j ++)
if(F[g++] == 0)
T[1] ++;
if(F[g-1] == 0)
T[2] ++;
for(j = 2; j <= N; j ++)
if(F[g++] == 0)
T[2] ++;
if(F[g-1] == 0)
T[3] ++;
for(j = N - 1; j >= 1; j --)
if(F[g++] == 0)
T[3] ++;
if(F[g-1] == 0)
T[4] ++;
for(i = N - 1; i > 1; i --)
if(F[g++] = 0)
T[4] ++;
if(F[k] == 0)
T[4] ++;
}
if(nr % 2 == 0){
g = k + N * N - 1;
for(j = 1; j <= N; j ++)
if(F[g--] == 0)
T[1] ++;
if(F[g+1] == 0)
T[2] ++;
for(j = 2; j <= N; j ++)
if(F[g--] == 0)
T[2] ++;
if(F[g+1] == 0)
T[3] ++;
for(j = N - 1; j >= 1; j --)
if(F[g--] == 0)
T[3] ++;
if(F[g+1] == 0)
T[4] ++;
for(i = N - 1; i > 1; i --)
if(F[g--] == 0)
T[4] ++;
if(F[k+N*N-1] == 0)
T[4] ++;
}
nr ++;
}
fout << T[1] << "\n" << T[2] << "\n" << T[3] << "\n" << T[4];
return;
}
int main(){
Sieve();
fin >> cod;
switch(cod)
{
case 1:{Cerinta_A();break;}
case 2:{Cerinta_B();break;}
}
return 0;
}