#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