条件
2 は 1 番目の素数であり,3 は 2 番目,5 は 3 番目,7 は 4 番目の素数である。
k 番目の素数 p に対し,k もまた素数である場合に p を「素数番目の素数」と呼ぶことにする.
例えば,3 と 5 は素数番目の素数であり,2 と 7 はそうではない。
整数 n に対し,素数番目の素数であって,n 以下であるものの和を H(n) と定義する。
この時、H(120097839643)を求めよ。
###考え方
素数番目の素数の数え方として素数を数えるプログラムを利用して3重構造の条件式にすれば、
素数番目の素数が数えられるのではないかと考えました。
ただ、このプログラムでは2つ目のflagが必ず1になってしまいます。
しかも、このプログラムでは値がこの条件のように大きくなると重くなってしまいます。
これらを解決する方法が思いつきません。
分かる方いたら回答をお願いします。(つたないプログラムで申し訳ありません)
発生している問題
nを変えても、値がすべて1になってしまいます
該当のソースコード
c
1#include <stdio.h> 2#include <math.h> 3 4int h(long long int n) 5{ 6 long long int i,j,k,c=1,flag=0; 7 for(i=3;i<=n;i++) 8 { 9 for(j=3;j<=n;j+=2) 10 { 11 for(k=3;k<=sqrt(j);k+=2) 12 { 13 if(j%k==0) 14 { 15 flag=1; 16 break; 17 } 18 } 19 if(flag==0) 20 { 21 if(i%j==0) 22 { 23 flag=1; 24 break; 25 } 26 } 27 } 28 c++; 29 } 30 return c; 31} 32 33int main(void){ 34 printf("%d",h(120097839643)); 35}