#include <stdio.h>
#include <stdlib.h>

int main(void){
  double Euler(int n);
  int find_k(int n);
  int is_prime(int n);

  printf("Euler(10) = %lf\n", Euler(10));
  printf("Euler(100) = %lf\n", Euler(100));
  printf("Euler(1000) = %lf\n", Euler(1000));
  printf("Euler(10000) = %lf\n", Euler(10000));
  return 0;
}

int find_k(int n){        //此副程式主要為找出4k+2的值
  int j;
  j = n/2;
  if(2*j%4==0){
    return 2*j+2;
  }else{
    return 2*j;
  }
}

double Euler(int n){        //n為項次,即要找出幾個質數進行計算
  int i=1,x=3;              //x為遞增用來找出質數數列
  double e=1;

  while(i<=n){
    if(is_prime(x)==1){     //x為質數則進行計算, 且項次+1
      e=e*x/find_k(x);
      i++;                  //找到質數,像次+1
    }
    x++;
  }
  return e*2;
}

int is_prime(int n){       //檢查n是否為質數
  int j;
  for(j=2;j<n;j++){        //小於i的自然數都拿來除以j
    if(n%j==0){            //若是可以整除則表示有因數
      return 0;            //非質數,回傳為否
    }
  }
  return 1;                //質數,回傳為真
}

創作者介紹
創作者 LearningNote 的頭像
nanosheep

LearningNote

nanosheep 發表在 痞客邦 留言(3) 人氣( 337 )