C言語のプログラムについての質問です。
a^b-cの式の変数を変更して、算出された値が素数なのかどうかをエラトステネスのふるいで
判定するプログラムを書こうとしています。
例えば、b=2,c=3だと、a^2-3のようにして、
for文で(a+1)^2-3のように変化させたいです。
自分で組んでみたのですが、動きません。
関数Yの宣言ののかのifで、エラーが出ます。
表示された警告文:thread 1:EXE_BAD_ACCESS (code=2. address=0x7fff5f3ffffc)
警告文を読んでも指示が書いてないので、わかりません。
アドバイスをいただけると嬉しいです。
c
1#include <stdio.h> 2#include <math.h> 3 4int main(void){ 5 6 //式の編集 a^b-c = result 7 double a_double = 1; 8 double b_double = 1; 9 unsigned c = 1; 10 unsigned a_int,b_int,result_int; 11 unsigned square_root_of_result; 12 unsigned primenumbercount = 0,compositenumbercount = 0; 13 unsigned i; 14 int result_experimental; 15 unsigned result_processed; 16 17 //プロトタイプ宣言 18 int X(); 19 int Y(); 20 //result_intが0や負の数にならないようにするための関数 21 22for(a_double=a_double;a_double<=5;a_double++){ 23 24 double result_double = pow(a_double,b_double); 25 26 result_int = result_double; 27 a_int = a_double; 28 b_int = b_double; 29 30 if(a_int*b_int<=c){ 31 32 a_double++; 33 34 X(); 35 36 result_experimental = Y(); 37 38 } 39 40 result_experimental = result_int - c; 41 42 result_int = result_experimental; 43 44 45 46 unsigned prime_structure[result_int]; 47 48 for(i=0;i<result_int;++i){ 49 50 prime_structure[i] = 1; 51 52 } 53 54 prime_structure[0] = 0;//1は素数ではない 55 56 square_root_of_result = sqrt(result_int); 57 58 //エラトステネスのふるい 59 unsigned num,j; 60 61 for(i=0;i<square_root_of_result;i++){ 62 63 if(prime_structure[i] == 1){ 64 65 num=i+1; 66 67 for(j=num*2-1;j<result_int;j=num+j){ 68 69 prime_structure[j]=0; 70 71 } 72 73 } 74 75 } 76 //エラトステネスのふるい fin 77 78 if(prime_structure[result_int-1] == 0){ 79 80 printf("@%dは、素数\n",result_int); 81 82 primenumbercount++; 83 84 } 85 86 else{ 87 88 printf("@%dは、非素数\n",result_int); 89 90 compositenumbercount++; 91 92 } 93 94 double allcount = primenumbercount+compositenumbercount;//necessary 95 double primenumbercount_double = primenumbercount; 96 double probability = primenumbercount_double/allcount*100;//necessary 97 printf("a^%d-%dの確率は、%f%%です。\n",b_int,c,probability);//necessary 98 99 }//for fin 100 101}//main fin 102 103 104int rem(a_double,a_int,b_double,b_int,result_int,c,result_experimental){ 105 106 double result_double = pow(a_double,b_double); 107 108 result_int = result_double; 109 a_int = a_double; 110 b_int = b_double; 111 112 result_experimental = result_int - c; 113 114 Y(); 115 116 return 0; 117 118} 119 120 121int ram(result_experimental,result_processed){ 122 123 if(result_experimental<0){ 124 125 X(); 126 127 } 128 129 else{ 130 131 result_processed = result_experimental; 132 133 } 134 135 return result_processed;//正の数になったresultを返す 136 137}
回答6件
あなたの回答
tips
プレビュー