Generated by Cython 0.12.1 on Sun Jul 18 10:53:25 2010

Raw output: _Users_wstein__sage_sage_notebook_sagenb_home_admin_478_code_sage42_spyx_0.c

 1: 
 2: include "interrupt.pxi"  # ctrl-c interrupt block support
 3: include "stdsage.pxi"  # ctrl-c interrupt block support
 4: 
 5: include "cdefs.pxi"
 6: def trial_division_cython2(unsigned long n):
static PyObject *__pyx_pf_74_Users_wstein__sage_sage_notebook_sagenb_home_admin_478_code_sage42_spyx_0_trial_division_cython2(PyObject *__pyx_self, PyObject *__pyx_arg_n); /*proto*/
static char __pyx_doc_74_Users_wstein__sage_sage_notebook_sagenb_home_admin_478_code_sage42_spyx_0_trial_division_cython2[] = "File: _Users_wstein__sage_sage_notebook_sagenb_home_admin_478_code_sage42_spyx_0.pyx (starting at line 6)";
static PyObject *__pyx_pf_74_Users_wstein__sage_sage_notebook_sagenb_home_admin_478_code_sage42_spyx_0_trial_division_cython2(PyObject *__pyx_self, PyObject *__pyx_arg_n) {
  unsigned long __pyx_v_n;
  unsigned long __pyx_v_p;
  unsigned long __pyx_v_m;
  unsigned long __pyx_v_i;
  PyObject *__pyx_v_dif;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("trial_division_cython2");
  __pyx_self = __pyx_self;
  assert(__pyx_arg_n); {
    __pyx_v_n = __Pyx_PyInt_AsUnsignedLong(__pyx_arg_n); if (unlikely((__pyx_v_n == (unsigned long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("_Users_wstein__sage_sage_notebook_sagenb_home_admin_478_code_sage42_spyx_0.trial_division_cython2");
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_v_dif = Py_None; __Pyx_INCREF(Py_None);
 7:     if n == 1: return 1
    __pyx_t_1 = (__pyx_v_n == 1);
  if (__pyx_t_1) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_int_1);
    __pyx_r = __pyx_int_1;
    goto __pyx_L0;
    goto __pyx_L5;
  }
  __pyx_L5:;
 8:     cdef unsigned long p, m, i
 9:     for p in [2, 3, 5]:
    __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __Pyx_INCREF(__pyx_int_2);
  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  __Pyx_INCREF(__pyx_int_3);
  PyList_SET_ITEM(__pyx_t_3, 1, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  __Pyx_INCREF(__pyx_int_5);
  PyList_SET_ITEM(__pyx_t_3, 2, __pyx_int_5);
  __Pyx_GIVEREF(__pyx_int_5);
  if (likely(((PyObject *)__pyx_t_3) != Py_None)) {
    __pyx_t_2 = 0; __pyx_t_4 = ((PyObject *)__pyx_t_3); __Pyx_INCREF(__pyx_t_4);
  } else {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  for (;;) {
    if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_4)) break;
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++;
    __pyx_t_5 = __Pyx_PyInt_AsUnsignedLong(__pyx_t_3); if (unlikely((__pyx_t_5 == (unsigned long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_p = __pyx_t_5;
 10:         if n%p == 0: return p
        if (unlikely(__pyx_v_p == 0)) {
      PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_1 = ((__pyx_v_n % __pyx_v_p) == 0);
    if (__pyx_t_1) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_3 = PyLong_FromUnsignedLong(__pyx_v_p); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L0;
      goto __pyx_L8;
    }
    __pyx_L8:;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 11:     # Algorithm: only trial divide by numbers that
 12:     # are congruent to 1,7,11,13,17,29,23,29 mod 30=2*3*5.
 13:     dif = [6, 4, 2, 4, 2, 4, 6, 2]
    __pyx_t_4 = PyList_New(8); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
  __Pyx_INCREF(__pyx_int_6);
  PyList_SET_ITEM(__pyx_t_4, 0, __pyx_int_6);
  __Pyx_GIVEREF(__pyx_int_6);
  __Pyx_INCREF(__pyx_int_4);
  PyList_SET_ITEM(__pyx_t_4, 1, __pyx_int_4);
  __Pyx_GIVEREF(__pyx_int_4);
  __Pyx_INCREF(__pyx_int_2);
  PyList_SET_ITEM(__pyx_t_4, 2, __pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  __Pyx_INCREF(__pyx_int_4);
  PyList_SET_ITEM(__pyx_t_4, 3, __pyx_int_4);
  __Pyx_GIVEREF(__pyx_int_4);
  __Pyx_INCREF(__pyx_int_2);
  PyList_SET_ITEM(__pyx_t_4, 4, __pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  __Pyx_INCREF(__pyx_int_4);
  PyList_SET_ITEM(__pyx_t_4, 5, __pyx_int_4);
  __Pyx_GIVEREF(__pyx_int_4);
  __Pyx_INCREF(__pyx_int_6);
  PyList_SET_ITEM(__pyx_t_4, 6, __pyx_int_6);
  __Pyx_GIVEREF(__pyx_int_6);
  __Pyx_INCREF(__pyx_int_2);
  PyList_SET_ITEM(__pyx_t_4, 7, __pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  __Pyx_DECREF(__pyx_v_dif);
  __pyx_v_dif = ((PyObject *)__pyx_t_4);
  __pyx_t_4 = 0;
 14:     m = 7; i = 1
    __pyx_v_m = 7;
  __pyx_v_i = 1;
 15:     while m*m <= n:
    while (1) {
    __pyx_t_1 = ((__pyx_v_m * __pyx_v_m) <= __pyx_v_n);
    if (!__pyx_t_1) break;
 16:         if n%m == 0: return m
        if (unlikely(__pyx_v_m == 0)) {
      PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_t_1 = ((__pyx_v_n % __pyx_v_m) == 0);
    if (__pyx_t_1) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = PyLong_FromUnsignedLong(__pyx_v_m); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L0;
      goto __pyx_L11;
    }
    __pyx_L11:;
 17:         m += dif[i%8]
        __pyx_t_5 = (__pyx_v_i % 8);
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_dif, __pyx_t_5, sizeof(unsigned long)+1, PyLong_FromUnsignedLong); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyInt_AsUnsignedLong(__pyx_t_4); if (unlikely((__pyx_t_5 == (unsigned long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_m += __pyx_t_5;
 18:         i += 1
        __pyx_v_i += 1;
  }
 19:     return n
    __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("_Users_wstein__sage_sage_notebook_sagenb_home_admin_478_code_sage42_spyx_0.trial_division_cython2");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_DECREF(__pyx_v_dif);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}