terça-feira, 13 de dezembro de 2011

Projeto Euler [Problema 3]

Solucionando o Problema 3 do Projeto Euler
Descrição do Problema: 
Find the largest prime factor of a composite number.
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?


Código:
package br.com.projetoeuler.problema3;

/**
 * Problema: Find the largest prime factor of a composite number.
 * @author Lucas Frizzo
 * lucas-frizzo.blogspot.com
 */
public class Problema3 {
 
 public int fatorPrimo(long num) {
  long aux = num;
  
  for (int i = 1; i <= num; i++) {
   int primo = ehPrimo(i);
      
   if (primo != 0) {
    System.out.println("primo: "+primo);
    
    while(aux%primo == 0){
     long divisao = aux/primo;
     System.out.println("divisao:"+divisao);
     
     if (divisao != 1) {
      aux = divisao;
     }else{
      return primo;
     }
    }
   }   
  }
  return 0;
 }
 
 public int ehPrimo(int num) {
  int primo = num;
  int cont = 0;
  for (int i = 1; i <= num; i++) {
   if (primo%i == 0) {
    cont ++;
   }   
  }
  if (cont==2) {
   return primo;
  }
  return 0;
  
 }
}

package br.com.projetoeuler.problema3;

import java.math.BigInteger;

/**
 * Problema: Find the largest prime factor of a composite number.
 * @author Lucas Frizzo
 * lucas-frizzo.blogspot.com
 */
public class TestProblema3 {
 
 public static void main(String[] args) {
  Problema3 problema3 = new Problema3();
  final long num = 600851475143L;
  //final long num = 13195;
  
  System.out.println("O maior Fator Primo de "+num+" é "+problema3.fatorPrimo(num)); 
 }

}


Resolução: O maior Fator Primo de 600851475143 é 6857




sexta-feira, 2 de dezembro de 2011

Projeto Euler [Problema 2]

Solucionando o Problema 1 do Projeto Euler
Descrição do Problema:
 Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

Código:

package br.com.projetoeuler.problema2;
/**
 * Problema:
 * Each new term in the Fibonacci sequence is generated by adding the previous two terms. 
 * By starting with 1 and 2, the first 10 terms will be:
 * 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
 * By considering the terms in the Fibonacci sequence whose values do not exceed four million, 
 * find the sum of the even-valued terms.
 * 
 * @author Lucas Frizzo
 * lucas-frizzo.blogspot.com
 */
public class Problema2 {
 private int numero;
 
 public int getNumero() {
  return numero;
 }

 public void setNumero(int numero) {
  this.numero = numero;
 }
 
 public int somaTermos(Problema2 problema2){
  int x=0;  
     int y=1;  
     int b = 1;
     int soma = 0;
       
     for(int i=0;iproblema2.getNumero()){ 
          System.out.println("soma:"+soma);  
          break;
         }  
     }return soma;
 }
}

package br.com.projetoeuler.problema2;

public class TesteProblema2 {
 public static void main(String[] args) {
  Problema2 problema2 = new Problema2();
  problema2.setNumero(4000000);
  problema2.somaTermos(problema2);
  
 }
}

terça-feira, 29 de novembro de 2011

Projeto Euler [Problema 1]

Solucionando o Problema 1 do Projeto Euler
Descrição do Problema: If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.


Código:
package br.com.projetoeuler.problema1;
/**
 * Problema1
 *  
 * @author Lucas Frizzo
 * lucas-frizzo.blogspot.com
 */
public class Problema1 {
 private int numero; 
 
 public int getNumero() {
  return numero;
 }
 
 public void setNumero(int numero) {
  this.numero = numero;
 }
 
 public int somaDosMultiplos(Problema1 problema1){
  int soma = 0;
  int numero = problema1.getNumero();
  
  for (int i = 1; i < numero; i++) {
   if (i % 3 == 0 || i % 5 == 0) {
    soma = soma + i;
   }
  }
  return soma;
 }

}

package br.com.projetoeuler.problema1;

public class TesteProblema1 {
 public static void main(String[] args) {
  Problema1 problema1 = new Problema1();
  problema1.setNumero(1000);
  
  System.out.println("Soma de todos os multiplos de 3 e 5 menores que " +
    ""+problema1.getNumero()+" = "+problema1.somaDosMultiplos(problema1));
 }
}


Resposta:
Soma de todos os multiplos de 3 e 5 menores que 1000 = 233168



quinta-feira, 24 de novembro de 2011

Labeled Loops (Loops Rotulados)

O conceito de Labeled Loop é bem simples, você concede um rótulo(nome) para um loop conforme o exemplo abaixo  o nome foi dado ao primeiro loop(inicio:) e precisar sair do loop por algum motivo você faz a chamada do break (break label)



package fj11;
/**
 * 
 * @author Lucas Frizzo
 * lucas-frizzo.blogspot.com
 */
public class LabeledLoops {
 public static void main(String [] args){  
        int total;  
        boolean erro = false;  
        inicio:  
        if(!erro)  
        for(int i=0;i<10;i++){  
            for(int j=0;j<10;j++){  
                for(int k=0;k<10;k++){  
                    for(int l=0;l<10;l++){  
                        for(int m=0;m<10;m++){  
                            total = (i*10000 + j*1000 +k*100 + l*10 + m);  
                            System.out.println("agora estamos tratando do : " + total);  
                            if(total == 666) {  
                                erro = true;  
                                break inicio;  
                            }  
                        }  
                    }  
                }  
            }  
        }  
    }
}

quarta-feira, 23 de novembro de 2011

Historia do JAVA

Para quem não conhece como surgiu a linguagem de programação Java a apostila da Caelum descreve como surgiu ... e é um ótimo material para quem esta querendo aprender a desenvolver...

" ... A Sun criou um time (conhecido como Green Team) para desenvolver inovações tecnológicas em
1992. Esse time foi liderado por James Gosling, considerado o pai do Java. O time voltou com a
idéia de criar um interpretador (já era uma máquina virtual, veremos o que é isso mais a frente) para
pequenos dispositivos, facilitando a reescrita de software para aparelhos eletrônicos, como vídeo
cassete, televisão e aparelhos de TV a cabo.
A idéia não deu certo. Tentaram fechar diversos contratos com grandes fabricantes de eletrônicos,
como Panasonic, mas não houve êxito devido ao conflito de interesses e custos. Hoje, sabemos
que o Java domina o mercado de aplicações para celulares com mais de 2.5 bilhões de dispositivos
compatíveis, porém em 1994 ainda era muito cedo para isso.
Com o advento da web, a Sun percebeu que poderia utilizar a idéia criada em 1992 para rodar
pequenas aplicações dentro do browser. A semelhança era que na internet havia uma grande
quantidade de sistemas operacionais e browsers, e com isso seria grande vantagem poder pro-
gramar numa única linguagem, independente da plataforma. Foi aí que o Java 1.0 foi lançado:
focado em transformar o browser de apenas um cliente fino (thin client ou terminal burro) para uma
aplicação que possa também realizar operações, não apenas renderizar html.
Atualmente os applets realmente não são o foco da Sun. É curioso notar que a tecnologia Java
nasceu com um objetivo em mente, foi lançado com outro, mas, no final, decolou mesmo no desen-
volvimento de aplicações do lado do servidor. Sorte?
Você pode ler a história da linguagem Java em: http://www.java.com/en/javahistory/
E um vídeo interessante: http://tinyurl.com/histjava
Em 2009 a Oracle comprou a Sun, fortalecendo a marca. A Oracle sempre foi, junto com a IBM,
uma das empresas que mais investiram e fizeram negócios através do uso da plataforma Java. ..."


Material do Treinamento Java e Orientação a Objetos (caelum-java-objetos-fj11) , Caelum.
download: http://www.caelum.com.br/download/caelum-java-objetos-fj11.pdf



quinta-feira, 10 de novembro de 2011

Sombreamento de Variáveis

Enquanto estudava ... gostei de um tópico interessante sobre sombreamento de variáveis (redeclarar uma variável que já tinha sido declarada anteriormente em algum outro local), que ao meu ver muitas pessoas como eu ficam as vezes na duvida se realmente o resultado da resposta estava certo...pois parece estarmos usando a variável oculta e no entanto estamos usando a variável de sombreamento.


Segue abaixo exemplos:


public class Foo {
 int size = 7;
 void changeIt(int size){
  size = size + 200;
  System.out.println("Tamanho no changeIt é "+size);
 }
 public static void main(String[] args) {
  Foo foo = new Foo();
  System.out.println("Valor de size "+foo.size);
  foo.changeIt(foo.size);
  System.out.println("Valor de size depois do changeIt "+foo.size);
 }
}

Resultado:
Valor de size 7
Tamanho no changeIt é 207
Valor de size depois do changeIt 7


public class Bar {
 int barNum = 28;
}

public class Foo2 {
 Bar myBar = new Bar(); 
 
 void changeIt(Bar myBar){
  myBar.barNum = 99;
  System.out.println("myBar no changeIt é "+myBar.barNum);
  myBar = new Bar();
  myBar.barNum = 400;
  System.out.println("myBar no changeIt é agora "+myBar.barNum);
 }
 public static void main(String[] args) {
  Foo2 foo2 = new Foo2();
  System.out.println("foo2.myBar.barNum no changeIt é "+foo2.myBar.barNum);
  foo2.changeIt(foo2.myBar);
  System.out.println("myBar.barNum depois do changeIt é "+foo2.myBar.barNum);

 }
}


Resultado:
foo2.myBar.barNum no changeIt é 28
myBar no changeIt é 99
myBar no changeIt é agora 400
myBar.barNum depois do changeIt é 99




segunda-feira, 7 de novembro de 2011

Codility

Exemplo de um Problema no Codility:
Dado um vetor de N posições,  retornar o tamanho do vetor considerando as seguintes condições:
a posição de N[0] = x é a primeira posição e a ultima posição considerar N[?] = -1.
Exemplo:
Dado o vetor a seguir N[1,4,-1,3,2] retornar o tamanho do vetor.
N[0] =  1
N[1] =  4
N[2] =  2
N[3] = -1
Então o tamanho desse vetor é 4.


public class Problema {
 /**
  * @author Lucas Frizzo
  * http://lucas-frizzo.blogspot.com/
  *
  *
  * @param A
  * @return
  */
 public int listLength ( int[] A ) {
      
  int tam =A.length;
  int[]B = new int[tam];
  B[0] = A[0];
  int aux = A[0];
  
  int cont = 1;
  int tamanho = 0;
  for (int i = 0; i < A.length; i++) {
    
    B[i+1] = A[aux];
    System.out.println("B["+i+"]:"+B[i]);
    
     aux = A[aux];
     cont ++;
     if(aux==-1){
       tamanho = cont;
      break;
     }
  }
  return tamanho;  
   }
}

sexta-feira, 28 de outubro de 2011

Estudo


Codility


Bom pra quem nunca ouviu falar em codility, nada mais é que uma das diversas ferramentas online para teste de avaliação que as empresas estão utilizando na hora do recrutamento de novos talentos.
Para quem está interessado em saber mais de como funciona segue o link http://codility.com/ na parte inferior do site existe um teste demo para aqueles curiosos de plantão.
A forma como os testes funcionam são bem parecidos com as maratonas de programação que rolam quando estamos na faculdade, então vocês podem esperar que vem chumbo grosso pela frente ...
Vale a pena pegar os livros, tutorias que falam sobre array, vetores que pelo demo que fiz e um teste que realizei apos o cadastro estavam lá pra quebrar a cabeça, é uma excelente forma de não deixarmos as mentes paradas...

quinta-feira, 27 de outubro de 2011

Olá Mundo!


  1. public class HelloWorldConsole  
  2. {  
  3.     public static void main(String args[])  
  4.     {  
  5.         System.out.println("Hello, Blogger!!!");  
  6.     }  
  7. }