Example #1
0
void mutation( individual *chr, double rate, my_random * rand ){
    
    int l = NUM_UAVS / 2;   // number of indexes in chromosome arrays
    
    double num;
    int i,j,k;
    for(i = 0; i < l; ++i){
        for(j = 0; j < 8; ++j){
                
            num = doub( rand  );
            
            // flip the current bit
            if( num <= rate)
                chr->genes[i] = chr->genes[i] ^ ( 1 << ( 7 - j )) ;
        }
    }
}
Example #2
0
// returns a non-trivial factor q of ZZ_p::modulus(), or 1 otherwise
void ECM_stage_two(ZZ& q, EC_p& Q, PrimeSeq& seq, long bound, long D) {
  long B1 = seq.next();
  if (B1<=2*D) {
    // no primes to work with
    set(q);
    return;
  }

  EC_p R;
  mul(R,B1,Q);
  // check R for divisor
  if (IsZero(R)) {
    set(q);
    return;
  }
  GCD(q,ZZ_p::modulus(),rep(R.Z));
  if (!IsOne(q))
    return;
  EC_p T;
  mul(T,B1-2*D,Q);

  // compute point multiples S[d]=2*d*Q
  EC_p S[D+1];
  S[0]=Q;
  doub(S[1],Q);
  doub(S[2],S[1]);
  for (long d=3; d<=D; ++d)
    addh(S[d],S[d-1],S[1],S[d-2]);
  ZZ_p beta[D+1];
  for (long d=0; d<=D; ++d)
    mul(beta[d],S[d].X,S[d].Z);

  ZZ_p g,t,t2;
  set(g);
  ZZ_p alpha;
  long r=B1;
  long p=seq.next();
  do {
    mul(alpha,R.X,R.Z);
    do {
      long delta = (p-r)/2;
      if (delta>D) break;
      //g *= (R.X-S[delta].X) * (R.Z+S[delta].Z) - alpha + beta[delta];
      sub(t,R.X,S[delta].X);
      add(t2,R.Z,S[delta].Z);
      t*=t2;
      t-=alpha;
      t+=beta[delta];
      g*=t;
      // next prime
      p = seq.next();
      if (p==0) {
	// ran out of primes (should never happen)
	p=NTL_MAX_LONG;
	break;
      }
    } while (p<=bound);
    if (p>bound)
      break;
    addh(T,R,S[D],T);
    swap(R,T);
    r+=2*D;
  } while (true);
  if (!IsZero(g))
    GCD(q,ZZ_p::modulus(),rep(g));
  else
    set(q);
}