#include #define p 41 struct nr { long n; nr(long a=0) {n=a%p;}; nr operator +(nr a); nr operator -(nr a); nr operator *(nr a); nr operator /(nr a); }; nr inverzni[p]; nr nr::operator +(nr a) { return nr(a.n+n); } nr nr::operator -(nr a) { return nr(p+n-a.n); } nr nr::operator *(nr a) { return nr(n*a.n); } nr nr::operator /(nr a) { return (*this)*inverzni[a.n]; } long i,j,k,l; long ints[p] // $ints[k-1] \ldots ints[k]-1$ určuje interval nalezených čísel, která lze vytvořit z~$k$ čtyřek long int1d,int1h,int2d,int2h; long kolik=1; // Počet nalezených čísel long mk=2; // Počet čtyřek k~vytvoření nového čísla long pc; // Počet čtyřek, které dodá první z~kombinovaných čísel nr found[p],p1,p2; long hm[p]; void test(nr a) { if (hm[a.n]==0) { hm[a.n]=mk; found[kolik]=a.n; kolik++; } } void main() { cout << '\n'; inverzni[0]=0; // Určíme inverzní prvky inverzni[1]=1; for(i=2;i