Pagini recente » Cod sursa (job #932585) | Cod sursa (job #678378) | Cod sursa (job #1980698) | Cod sursa (job #1010832) | Cod sursa (job #1709996)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#include <cmath>
#include <algorithm>
#define NMAX 1000005
using namespace std;
ifstream in ( "consecutive.in" );
ofstream out ( "consecutive.out" );
int T , n ;
pair < int , int > v[NMAX];
int frecv[NMAX];
int main ( void )
{
int i,j;
in >> T;
for ( i = 1 ; i <= T ; ++i ){
in >> n ;
memset ( frecv , 0 , sizeof(frecv));
int contor = 0 ;
if ( n % 2 == 1 )
{
++frecv[2] ;
++contor;
v[contor].first = n/2;
v[contor].second = n/2 + 1 ;
}
for ( j = 3 ; j <= 2*(int) sqrtl(n) ; ++j ) {
if ( ( j %2 == 1 && n % j == 0 ) && frecv[j] == 0 ){
int a = ( 2 * n / j + 1 - j ) / 2 ;
if ( a > 0 ){
++frecv[j] ;
++contor;
v[contor].first = a ;
v[contor].second = a + j - 1 ;
}
}
else if ( ( j % 2 == 0 && n %(j/2) == 0) && frecv[j] == 0 ) {
//cout << " intru cu " << j << " \n " ;
int a = ( 2 * n / j + 1 - j ) / 2 ;
if( ( a + ( a+j-1) ) *j == 2 * n ) {
if ( a > 0 ){
++frecv[j] ;
++contor;
v[contor].first = a ;
v[contor].second = a + j - 1 ;
}
}
}
}
cout << contor << "\n";
for ( j = 1; j <= contor ; ++j )
cout << v[j].first << " " << v[j].second << "\n";
}
return 0 ;
}