#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#include <stdlib.h>
using namespace std;
bool esPrimo(int n)
{
if((n&1)==0)
return (n==2);
double raiz = sqrt(n);
for(int i = 3; i<=raiz ; i+=2)
if((n%i) == 0)
return false;
return true;
}
string parseString(int n)
{
string sol = "";
while(n>0)
sol = (char)((n%10)+'0')+sol , n/=10;
return sol;
}
bool esValido(string cad)
{
for(int i= 0 ; i<cad.size(); i++)
if(cad[i]=='0')
return false;
return true;
}
int main()
{
bool probados[10000]= {false};
for(int n = 1488; n<=9999; n++)
{
if(!probados[n])
{
string num = parseString(n);
if(esValido(num))
{
vector<int> permutaciones;
do
{
int ent = atoi(num.data());
probados[ent] = true;
permutaciones.push_back(ent);
}
while(next_permutation(num.begin(),num.end()));
int nroPer =permutaciones.size();
for(int i = nroPer; i>=2 ; i--)
if(esPrimo(permutaciones[i]))
for(int j= i-1; j>=1 ; j--)
if(esPrimo(permutaciones[j]))
for(int k = j-1; k>=0; k--)
if(esPrimo(permutaciones[k]))
if(permutaciones[i]-permutaciones[j] == permutaciones[j]-permutaciones[k])
{
cout << permutaciones[k];
cout << permutaciones[j];
cout << permutaciones[i]<<endl;
return 0;
}
}
}
}
return 0;
}
Mostrando entradas con la etiqueta projecteuler. Mostrar todas las entradas
Mostrando entradas con la etiqueta projecteuler. Mostrar todas las entradas
miércoles, 11 de abril de 2012
Project Euler 49
Project Euler 48
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger res = BigInteger.ONE;
BigInteger modu = new BigInteger("10000000000");
for (int i = 2; i <= 1000; i++)
res = res.add(new BigInteger(i+"").modPow(new BigInteger(i+""), modu));
System.out.println(res.mod(modu));
}
}
Project Euler 47
#include <iostream>
#include <vector>
#include <set>
using namespace std;
bool Factorizar(int n,int nrofactores,vector<int>* factores)
{
int i;
int cant = 0;
for(i = 2; n>1 ; i++)
if((n%i) == 0 )
{
cant++;
if(cant>nrofactores)
return false;
int factor =i;
n/=i;
while((n%i) == 0)
n/=i ,factor*=i;
factores->push_back(factor);
}
return (cant==nrofactores);
}
int main()
{
int ini = 1;
vector<int> a,b,c,d;
bool swa,swb,swc,swd;
swa =swb=swc=swd = false;
while(true)
{
swa = swb;
swb = swc;
swc = swd;
a.swap(b);
b.swap(c);
c.swap(d);
d.clear();
swd = Factorizar(ini,4,&d);
//cout <<ini<<" = " << swa <<" "<< swb <<" "<< swc <<" "<< swd <<endl;
if(swa && swb && swc && swd)
{
set<int> miset(a.begin(),a.end());
miset.insert(b.begin(),b.end());
miset.insert(c.begin(),c.end());
miset.insert(d.begin(),d.end());
if(miset.size()==16)
{
cout << ini<<endl;
return 0;
}
}
ini++;
}
return 0;
}
Project Euler 46
#include <iostream>
#include <cmath>
#define LIM 10000
using namespace std;
int primos[5000]={0};
bool criba[LIM+1]={false};
int cantPrimos = 1;
void generarCriba(){
int i,j;
double raiz = sqrt(LIM);
for(i = 4 ; i<=LIM ;i+=2)
criba[i] = true;
for(i = 3 ; i<=raiz;i+=2)
if(!criba[i])
for(j = i+i ; j<=LIM ; j+=i)
criba[j] = true;
primos[0] = 2;
for(i = 3; i<=LIM;i+=2)
if(!criba[i])
primos[cantPrimos++] = i;
}
bool sePuedeEscribir(int n){
if(!criba[n])
return true;
int i;
for(i = 0; i<cantPrimos && primos[i]+2 <= n; i++){
int p = 1;
int var;
while((var=(primos[i]+(2*p*p)))<=n){
if(var==n)
return true;
p++;
}
}
return false;
}
int main()
{
generarCriba();
int n = 33;
while(true){
if(!sePuedeEscribir(n)){
cout << n<< endl ; return 0;
}
n+=2;
}
return 0;
}
Project Euler 45
#include <iostream>
#include <cmath>
using namespace std;
int incr = 286;
int s = 40755;
bool esTriangular(int n)
{
while(s<n)
s+=incr, incr++;
return s == n;
}
bool esPentagonal(int x)
{
double n = (sqrt(24.0*x + 1)+1)/6.0;
return n==floor(n);
}
int main()
{
int hexa;
int id=144 ;
while(true)
{
hexa = id*(2*id -1 );
if(esPentagonal(hexa) && esTriangular(hexa))
{
cout << hexa<<endl;
return 0;
}
id++;
}
return 0;
}
martes, 10 de abril de 2012
Project Euler 44
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
bool esPentagonal(int x)
{
double n = (sqrt(24.0*x + 1)+1)/6.0;
return n==floor(n);
}
int obtPent(int n)
{
return (n*(3*n-1))/2;
}
int main()
{
vector<int> pentagonals;
pentagonals.push_back(1);
bool sw = true;
int pent,resta;
int k = 2;
while(sw)
{
pent = obtPent(k);
vector<int>::iterator it = pentagonals.begin();
while(it != pentagonals.end())
{
resta = pent - (*it);
if(esPentagonal(resta))
if(esPentagonal(pent+(*it)))
{
cout<<resta<<endl;
return 0;
}
it++;
}
pentagonals.push_back(pent);
k++;
}
return 0;
}
Project Euler 43
#include <iostream>
#include <algorithm>
#include <stdlib.h>
using namespace std;
int primos[8] = {2,3,5,7,11,13,17};
int main()
{
string ini = "0123456789";
string fin = "9876543210";
unsigned long long int suma = 0 ;
while(ini.compare(fin)!=0)
{
bool sw = true;
for(int i = 7; i >= 1 && sw; i--)
sw = ((((ini[i]-'0')*100+(ini[i+1]-'0')*10+(ini[i+2]-'0'))%primos[i-1])==0);
if(sw)
suma += atof(ini.data());
next_permutation(ini.begin(),ini.end());
}
cout <<suma << endl;
return 0;
}
Project Euler 42
#include <iostream>
#include <fstream>
using namespace std;
bool esT[200];
void generarTrian()
{
for(int i = 0 ; i<200; i++)esT[i] = false;
int s = 1;
for(int c = 2; s<200; c++)
{
esT[s] = true;
s += c;
}
}
int main()
{
generarTrian();
ifstream fin("words.txt");
string cad ;
fin >> cad;
cad += ",";
int maxi = 0;
int a,b;
a = 0;
b = -1;
for(int i = 1 ; i<cad.size(); i++)
{
while(i<cad.size() and cad[i]!=',')
i++;
a = b+1;
b = i;
int tmp = 0 ;
for(int j = a+1; j<b-1; j++)
tmp += (cad[j]-'A'+1);
if(esT[tmp])
maxi++;
}
cout << maxi << endl;
return 0;
}
Project Euler 41
#include <iostream>
#include <algorithm>
using namespace std;
const int n= 7654322;
bool esPrimo[n+1];
void generarCriba()
{
for(int i = 3 ; i <= n; i+=2)
esPrimo[i] = true;
for(int i = 4 ; i <= n; i+=2)
esPrimo[i] = false;
esPrimo[2] = true;
for(int i = 3; i*i <= n; i+=2)
if(esPrimo[i])
for(int j = i+i ; j <= n; j+=i)
esPrimo[j] = false;
}
int main()
{
generarCriba();
string ini = "7654321";
string fin = "1234567";
int i = 0 ;
while(ini.compare(fin)!=0)
{
if(((ini[6]-'0')&1)!=0)
if(esPrimo[atoi(ini.data())])
{
cout << ini << endl;
break;
}
prev_permutation(ini.begin(),ini.end());
}
return 0;
}
Project Euler 37
#include <iostream>
#include <bitset>
#include <math.h>
using namespace std;
bool esPrimo(int n)
{
if(n==1)
return false;
for(int i = 2; i*i<=n; i++)
if(n%i==0)
return false;
return true;
}
bool esCPI(int n)
{
int nc = 10;
while(nc<n)
{
if(!esPrimo(n%nc))
return false;
nc *= 10;
}
return true;
}
int main()
{
int ini=0,fin=0;
int term[] = {1,3,7,9};
int td[100]= {2,3,5,7};
int pos=4;
ini = 0;
fin = 3;
for(int cd = 1; cd<=9; cd++)
{
for(int i=ini ; i<=fin; i++)
{
for(int t = 0 ; t<=3; t++)
{
int ope = td[i]*10+term[t];
if(esPrimo(ope))
td[pos++] = ope;
}
}
ini = fin+1;
fin = pos-1;
}
int sum = 0 ,cant = 0;
for(int i = 4; i<=fin ; i++)
if(esCPI(td[i]))
{
cout << td[i] << endl;
sum += td[i];
cant++;
}
cout << "cantidad total = "<<cant<<endl;
cout << "resultado final = "<<sum<<endl;
return 0;
}
Project Euler 36
#include <iostream>
#include <string>
using namespace std;
bool esPalindrome(string cad)
{
int i,j;
i = 0;
j = cad.size()-1;
while(i<j)
if(cad[i++]!=cad[j--])
return false;
return true;
}
string abase2(int n)
{
string sol = "";
while(n>0)
sol = (char)((n&1)+'0')+sol , n >>= 1;
return sol;
}
string aString(int n)
{
string sol = "";
while(n>0)
{
int d = n%10;
sol = (char)(d+'0')+sol;
n /= 10;
}
return sol;
}
int main()
{
//872187
int suma = 0 ;
const int n = 1000000;
for(int i = 1; i < n; i+=2)
if(esPalindrome(aString(i)) && esPalindrome(abase2(i)))
suma += i;
cout << suma << endl;
return 0;
}
Project Euler 35
#include <iostream>
#include <bitset>
using namespace std;
const int n = 1000000;
bitset<n+1> criba;
void generarCriba()
{
criba[0] = criba[1] = true;
for(int i = 2 ; i*i<=n; i++)
if(!criba[i])
for(int j = i+i; j<=n; j +=i )
criba[j]= true;
}
int main()
{
generarCriba();
int cont = 4;//2,3,5,7 ya cuentan como primos circulares
int cc = 1;
int sncc= 100;
int nc = 10;
for(int i = 10 ; i<n; i++)
{
if(i==sncc)
{
cc++;
sncc *=10;
nc *= 10;
}
if(!criba[i])
{
int num = i;
int c = 0;
for(int u = 1 ; u<=cc; u++)
{
int d = num%10;
num /= 10;
num = (d*nc+num);
if(!criba[num])
c++;
else
break;
}
if(c == cc)
cont++;
}
}
cout <<"Resultado final = "<< cont<< endl;
return 0;
}
Project Euler 34
#include <iostream>
using namespace std;
int main()
{
int sum = 0 ;
int fac[10] = {1,1,2};
for(int i = 3; i<=9; i++)
fac[i] = i*fac[i-1];
int num = 0;
int n[5]= {0};
for(n[0] = 0 ; n[0]<10 ; n[0]++)
for(n[1] = 0 ; n[1]<10 ; n[1]++)
for(n[2] = 0 ; n[2]<10 ; n[2]++)
for(n[3] = 0 ; n[3]<10 ; n[3]++)
for(n[4]= 0 ; n[4]<10 ; n[4]++)
{
int pos = 0 ;
while(pos <=4 && n[pos]==0)
pos++;
if(fac[n[0]]+fac[n[1]]+fac[n[2]]+fac[n[3]]+fac[n[4]]-pos==num)
{
cout << n[0] << "! + ";
cout << n[1] << "! + ";
cout << n[2] << "! + ";
cout << n[3] << "! + ";
cout << n[4] << "! = " << num<< endl;
sum += num;
}
num++;
}
cout << sum-3<< endl;
/*Le restamos 3 por que en el enunciado
indica que no hay que sumar 1! = 1 y 2! = 2
*/
return 0;
}
Project Euler 33
#include <iostream>
using namespace std;
int mcd(int a,int b)
{
int c;
if(b>a)
{
c = a;
a = b;
b = c;
}
c = a%b;
while(c > 0)
{
a = b;
b = c;
c = a%b;
}
return b;
}
int main()
{
int mcdiv;
int de,nu;
int resultadoden = 1;
int resultadonum = 1;
for(int num = 10; num<=50; num++)
for(int den = 10; den <= 99 ; den++)
{
mcdiv = mcd(num,den);
if(num != den && mcdiv!=1 && mcdiv%10!=0)
{
de = den/mcdiv;
nu = num/mcdiv;
int dat1[2]= {num/10,num%10};
int dat2[2]= {den/10,den%10};
for(int i=0; i<=1; i++)
for(int j = 0; j<=1; j++)
if(dat1[i]!=0 && dat2[j]!=0 &&
dat1[i]%nu==0 &&
dat2[j]%de==0 &&
(dat1[i]/nu)==(dat2[j]/de) &&
(dat1[(i+1)%2]==dat2[(j+1)%2]))
{
cout << num<<"/"<<den<<" = "<<dat1[i]<<"/"<<dat2[j]<<endl;
resultadoden *= den;
resultadonum *= num;
}
}
}
cout << "Resultado final = "<< resultadoden/mcd(resultadonum,resultadoden) <<endl;
return 0;
}
Project Euler 32
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <set>
#include <numeric>
using namespace std;
int factorial(int n)
{
int f = 1;
while(n>0)
f *= n--;
return f;
}
int main()
{
set<int> guardar ;
string cad = "123456789";
int tam = cad.length();
int n1,n2,n3,i,j;
int fac = factorial(tam);
for(int n = 0 ; n < fac; n++)
{
for(i = 1 ; i <=(tam-2) ; i++ )
{
n1 = atoi(cad.substr(0,i).data());
for(j = 1 ; j <= (tam-i-1); j++)
{
n2 = atoi(cad.substr(i,j).data());
n3 = atoi(cad.substr(i+j,tam-i+j).data());
if((n1*n2) == n3)
{
cout << n1 << " x "<<n2 <<" = "<<n3<<endl;
guardar.insert(n3);
}
}
}
next_permutation(cad.begin(),cad.end());
}
cout << "Resultado Final = "<<accumulate(guardar.begin(),guardar.end(),0)<<endl;
return 0;
}
jueves, 15 de marzo de 2012
Project Euler 40
#include <iostream>
#include <math.h>
using namespace std;
//metodo para obtener el i-esimo caracter de la concatenacion de 1,2,3,4,5...
int d(int i)
{
int cd = 0; //cantidad de digitos
int cda = 0; //cantidad de digitos acumulados
int scd = 0; //siguiente cantidad de dtitos
while( cda + scd < i)
{
cda += scd;
cd++;
scd = (pow(10,cd)-pow(10,cd-1))*cd;
}
int numactual = pow(10,cd-1)-1;//numero actual hasta el cual se sumo
while(cda < i)
{
cda += cd;
numactual++;
}
int csp = (cda-i);
while(csp--) numactual /= 10;
return numactual%10;
}
int main()
{
cout << d(1)*d(10)*d(100)*d(1000)*d(10000)*d(100000)*d(1000000)<<endl;
return 0;
}
martes, 13 de marzo de 2012
Project Euler 39
#include <iostream>
using namespace std;
int main()
{
int v[1001], a, b, c;
for( a = 1000 ; a >= 0 ; a--) v[a] = 0 ;
for ( c = 1; c <= 1000; c++)
for ( b = 1; b < c; b++)
for ( a = 0; a <= b; a++)
if(a+b>c && b-a<c && a+b+c <= 1000 && c*c == a*a+b*b)
v[a+b+c]++;
b = 0 ;
for ( a = 0; a <= 1000; a++)
if(v[a]>v[b])
b = a;
cout << b << endl;
return 0;
}
Project Euler 38
public class Problema38 {
static boolean isPandigital(String num){
if(num.length()!=9)
return false;
for (int i = 1; i < 10; i++)
if(!num.contains(""+i))
return false;
return true;
}
public static void main(String[] args) {
String max = "123456789";
for (int i = 9; i < 10000; i++) {
int m = 1;
String sol = "";
while(sol.length()<9){
sol += (i*m);
m++;
}
if(sol.length()==9)
if(isPandigital(sol))
if(sol.compareTo(max)>0)
max = sol;
}
System.out.println(max);
}
}
lunes, 20 de febrero de 2012
Problem Euler 18 y 67
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class problem18
{
public static void main(String[] args) throws FileNotFoundException {
int m[][]=readArch();
for (int i = m.length-2; i >=0; i--)
{
for (int j = 0; j <=i; j++) {
m[i][j]+=Math.max(m[i+1][j+1], m[i+1][j]);
}
}
System.out.println(m[0][0]);
}
private static int[][] readArch() throws FileNotFoundException
{
int triangulo[][]= new int [150][150];
Scanner sc = new Scanner (new File("C:\\triangle1.txt"));
int co=0,fi=0;
while(sc.hasNextLine())
{
String linea = sc.nextLine();
String v[]= linea.split(" ");
for (int i = 0; i < v.length; i++)
{
co=i;
triangulo[fi][co]=Integer.parseInt(v[i]);
}
fi++;
}
return triangulo;
}
}
domingo, 19 de febrero de 2012
project euler # 41
import java.util.Arrays;
import java.util.BitSet;
import java.util.Scanner;
public class problem41
{
public static void main(String[] args)
{
long tiempo= System.currentTimeMillis();
BitSet a = new BitSet(987654321);
int i =2,j=0;
for(i=2;(i*i)<=10000000;i=i+1)
{
if(!a.get(i))
{
for(j=i+i;j<=10000000;j=j+i)
{
a.set(j);
}
}
}
for (int j2 =7654321; j2 >=1 ;j2--)
{
String x=Integer.toString(j2);
char v[]= x.toCharArray();
Arrays.sort(v);
if(!a.get(j2))
{
if(ispandigital(x, v[v.length-1]-48))
{System.out.println(x);
break;
}
}
}
System.out.println(System.currentTimeMillis()-tiempo);
}
public static boolean ispandigital(String x,int n)
{
boolean v[]= new boolean[n+1];
for (int i = 0; i < x.length(); i++)
{
v[x.charAt(i)-48]=true;
}
for (int i = 1; i < n+1; i++)
{
if(!v[i])
return false;
}
return true;
}
}
Suscribirse a:
Entradas (Atom)