// Copyright (c) 2012 Vadym Kliuchnikov sqct(dot)software(at)gmail(dot)com, Dmitri Maslov, Michele Mosca // // This file is part of SQCT. // // SQCT is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // SQCT is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with SQCT. If not, see . // #include "numbers-stat.h" template< int n> Stats::Stats() { base::generate_all_numbers(); static const int sde_range = base::denom_exp * 2 + 1; vector sde_stat_has_pair; vector sde_stat_no_pair; vector max_solutions; vector min_solutions; sde_stat_has_pair.resize(sde_range); sde_stat_no_pair.resize(sde_range); max_solutions.resize(sde_range); min_solutions.resize(sde_range, numeric_limits::max()); for( int ipxx = 0; ipxx < base::max_val2 + 1; ++ipxx ) { for( int j = 0; j < base::ipQ_range; ++j ) { int ipyy = base::max_val2 - ipxx; int ipQxx = j - base::ipQ_offset; int ipQyy = -ipQxx; int k = base::ipQ_offset + ipQyy; int sde = base::sdes[ipxx][j]; int sde2 = base::sdes[ipyy][k]; int szx = base::vals[ipxx][j].size(); int szy = base::vals[ipyy][k].size(); int idx = min(sde2,sde); if( szx > 0 && szy > 0 ) { sde_stat_has_pair[idx] ++; max_solutions[idx] = max( max_solutions[idx],szx ); min_solutions[idx] = min( min_solutions[idx],szx ); } if( szx > 0 && szy == 0) { sde_stat_no_pair[sde] ++; } } } int s1 = sde_stat_has_pair[0] ; int s2 = sde_stat_no_pair[0] ; for( int i = 0; i < sde_range; ++i ) { cout << i << " " << s1 << " " << s2 << " " << (double) s1 / (double) (s1 + s2 ) << " " << min_solutions[i] << " " << max_solutions[i] << endl; s1 = s1 + sde_stat_has_pair[i]; s2 = s1 + sde_stat_has_pair[i]; } } ///////////// Compilation request //////////////////// template class Stats<2>; template class Stats<4>; template class Stats<6>; template class Stats<8>; template class Stats<10>; template class Stats<12>; template< int n> void numbersStatistics() { auto st = shared_ptr > (new Stats); } ///////////// Compilation request //////////////////// template void numbersStatistics<2>(); template void numbersStatistics<4>(); template void numbersStatistics<6>(); template void numbersStatistics<8>(); template void numbersStatistics<10>(); template void numbersStatistics<12>();