27 Mart 2013 Çarşamba

Thirty fifth solution pf Project Euler - Circular primes





#include "stdafx.h"
#include <iostream>
#include<stdio.h>
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include "efe.h"
#include <time.h>
using namespace std;

bool prime(int y);
int finddigit(int y);
int getpow(int x);
bool circular(int dizi[],int digit);

int getpow(int x) {
 int tot=1;
 if(x==0) {
  return tot;
 }else {
      do {
    tot*=10;
    x--;
   }while(x>0);
    return tot;
 }
}

bool prime(int y) {
 if (y % 2 == 0)
 return false;
 for (int i = 3; i <= (int) sqrt((double) y); i++) {
 if (y % i == 0)
 return false;
 }
 return true;
}

int finddigit(int y) {
int k=0;
do {
 y/=10;
               k++;

}while(y>0);

return k;
}

bool circular(int dizi[],int digit) {
 int digt=digit,c=0,num;
 for(int i=0;i<digit;i++) {
num=0;
c=0;
for(int k=i;k<digt;k++,c++){
num+=dizi[k]*getpow(digit-(c+1));
if(k==digit-1) {
k=-1;
digt = i;

}
 
}
digt = digit+1;
if(!prime(num)) {
return 0;
}

 }

 return 1;
}


void make() {
int c,dizi[6],k=0,result=0;
  for(int i=2;i<1000000;i++) {
 k=finddigit(i)-1;
 c=i;
 do {

 dizi[k] = c % 10;
 c/=10;
               k--;
 }while(c>0);
 if(circular(dizi,finddigit(i))) {
result++;

 }
  }
  cout << "Project Euler - Problem 35(Circular primes)\n";
  cout << "Result :" << result+1 << " efekanpulatli.blogspot.com" << endl;
}


int main()
{

clock_t tStart = clock();
make();
printf("Time taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
system("pause");
return 0;
}


Hiç yorum yok:

Yorum Gönder