sábado, dezembro 25, 2004

Goldbach

Sobre uma breve discussão a respeito do Teorema de Goldbach.
Pintou no Só Matemática um código sobre.
Reescrevi-o para C. Há uma falha a ser corrigida, mas fica para depois.

#include <stdio.h>
#include <math.h>

int IsPrime (int p){
   int j=0;
   if (p%2 == 0) return 0;
   for (j=3; j<=1+(int)sqrt(p) && (p%j!=0); j+=2);
   return (p%j!=0);
}

int main (int argc, char *argv[]) {
   int i=0, m=0, n=0;

   if (argc!=2){
      puts ("use ./goldbach "); exit(1);
   }
   n=atoi(argv[1]);

   if (n<=4){
      puts ("numero muito pequeno"); exit(1);
   }

   if (n%2==1){
      puts ("numero impar"); exit(1);
   }


   printf ("%d:", n);

   for (i=3; i<=n/2; i+=2) {
      if (IsPrime(i) && IsPrime(n-i)) {
         printf("\n\t %ld = %ld + %ld",n, i, n-i);
         m++;
      }
   }

   printf ("\n%d representacoes distintas\n", m);
   return 0;
}

domingo, dezembro 12, 2004

Links para alguns livros de Matemática

1. (with X.T. Duong) Elementary Mathematics, 148 pp. (web edition, 2000).

2. First Year Mathematics, 365 pp. (web edition, 2003).

3. Discrete Mathematics, 193 pp. (web edition, 2003).

4. Linear Algebra, 71 pp. (web edition, 2003).

5. Multivariable and Vector Analysis,158 pp. (web edition, 2003).

6. Introduction to Complex Analysis, 167 pp. (web edition, 2003).

7. Fundamentals of Analysis, 100 pp. (web edition, 2003).

8. Linear Functional Analysis, 86 pp. (web edition, 2003).

9. Introduction to Lebesgue Integration, 77 pp. (web edition, 2003).

10. Elementary Number Theory, 69 pp. (web edition, 2003).

11. Distribution of Prime Numbers, 81 pp. (web edition, 2003).

12. Lectures on Irregularities of Point Distribution, 63 pp. (web edition, 2000).

quinta-feira, dezembro 09, 2004

Um pouco da história do Projeto GNU

Publicado originalmente no livro "Open Sources"

"Quando eu comecei a trabalhar no Laboratório de Inteligência Artificial do MIT (N.d.T. Massachussets Institute of Technology) em 1971, eu me tornei parte de uma comunidade que compartilhava software que existia a muitos anos. Compartilar software não era limitado apenas para nossa comunidade particular; é tão antigo quanto os computadores, assim como compartilhar receitas é tão antigo quanto cozinhar. Mas nós fizemos mais do que a maioria."

..........

"O Laboratório de IA usava um sistema operacional de tempo compartilhado chamado ITS (N.d.T. Incompatible Timesharing System) que a equipe de hackers do laboratório (1) havia desenvolvido e escrito na linguagem assembler para o Digital PDP-10, um dos maiores computadores da era. Como um membro dessa comunidade, um membro da equipe de hackers do laboratório de IA, meu trabalho era melhorar esse sistema."

..........


"O termo "software livre" é mal interpretado algumas vezes--não tem nada haver com preço. Ele se refere à liberdade. Aqui, então, está a definição de software livre: um programa é software livre, para você, usuário qualquer, se:

* Você tem a liberdade para executar o programa, para qualquer propósito.
* Você tem a liberdade de modificar o programa para se adequar às suas necessidades. (Para tornar este tipo de liberdade efetivo na prática, você deve ter acesso ao código fonte, uma vez que fazer mudanças em um programa sem o código fonte é extremamente difícil.)
* Você tem a liberdade de redistribuir cópias, tanto de graça quanto por uma taxa.
* Você tem a liberdade de distribuir versões modificadas do programa, de modo que a comunidade possa se beneficiar das suas melhorias. "


(1) O uso do termo "hacker" significando "alguém que quebra segurança" é uma confusão por parte da mídia das massas. Nós hackers nos recusamos a reconhecer este significado, e continuamos utilizando a palavra significando "Alguém que ama programar e gosta de saber fazê-lo com esperteza."

Script de substituição em série

Script para bash que lê um arquivo de "configuração" com uma lista de palavras e depois entra interativamente em uma lista de subdiretórios varrendo arquivos de texto um a um e substituindo expressões por outras.

O mesmo lagoritmo pode ser usado para criar semelhante em perl, php, python, c etc. Dependendo da linguagem ele cobrirá outras plataformas.

Foi testado em textos menos complexos distribuídos em árvores de diretórios. Pode ser usado por exemplo em diretórios de páginas de html.


#! /bin/bash
# clontexto - Deve ter um jeito mais facil de se fazer essa @#$%!! de serviço.

[[ $# -ne "3" ]] && echo -e "Parametros errados.\nUse ./clontexto.sh " && exit;
[[ ! -f $1 ]] && echo "$1: Arquivo inexistente" && exit;
[[ ! -d $2 ]] && echo "$2: Diretorio inexistente" && exit;
[[ -d $3 ]] && echo "$3: Destino existente" && exit;

direc () {
    cd $1;
    q=`pwd`;
    d=${q/$dir_mod/};

    [[ ! -d $dest_dir/$d ]] && mkdir $dest_dir/$d;

    for i in *; do
        [[ -d $i ]] && direc "$i"
        [[ -f $i ]] && sed "${f[*]}" "$i" > "$dest_dir/$d$i";
    done;
    cd ..
}

arq_conf=$1;
dir_mod=$2;
dest_dir=$3;

t=1;
while read i; do
    f[$((t++))]="s/${i/://}/g;";
done < $arq_conf;

c=`pwd`; t=1;
direc "$dir_mod" "$dest_dir";
cd $c;

sexta-feira, dezembro 03, 2004

CD Shell - Múltiplos boots em Live CDs

Se LiveCD virou moda, imaginem agora com este novo sistema para selecionar distros em boots múltiplos. Escolhe-se kernel, aplicativos, distros etc.
Se for possível usar com DVD, não irá prestar ...


Ainda não o testei.




"CD Shell is a scriptable menu system that provides the ability to create interactive multi-boot optical discs. It will make PC-bootable compact discs or DVD's that can select from several program loaders or kernels located on the disc, or boot from other local disk drives that are attached to the system."