4neurons logo


CNumber SC(const CNumber& n, const CNumber& boundary)
{
	CNumber a,b,c,d;
		
	for(a=SQRT(n)+1;a<=boundary;++a){		
		b=a*a;
		c=Modulo(b,n);
		d=SQRT(c);
		if(d*d==c)
			return NWD(n,b-a*d); //NWD==GCD
	}
	return 1;
}