#include #include #include int main() { char str[5]; mpz_t d,m,r,v; mpz_init(d); mpz_init(m); mpz_init(r); mpz_init(v); mpz_set_si(d,1); mpz_set_si(m,1); mpz_set_si(v,600851475143); do{ mpz_add_ui(d,d,1); mpz_cdiv_r(r,v,d); if(mpz_sgn(r)==0) if(prime(d)==0) mpz_mul(m,m,d); }while(mpz_cmp(m,v)<0); printf("\n\t%s\n\n",mpz_get_str(str,10,d)); return 0; } int prime(mpz_t v) { mpz_t a,re,ro; mpz_init(a); mpz_init(re); mpz_init(ro); mpz_set_si(a,2); mpz_sqrt(ro,v); mpz_add_ui(ro,ro,1); if(mpz_cmp_si(v,0)==0||mpz_cmp_si(v,1)==0) return 1; else { if(mpz_cmp_si(v,2)==0) return 0; else { if(mpz_cdiv_r_ui(re,v,2)!=0) { for(;mpz_cmp(a,ro)!=0;mpz_add_ui(a,a,1)) { mpz_cdiv_r(re,v,a); if(mpz_sgn(re)==0) return 1; } return 0; } else return 1; } } }