C言語(17)双子素数問題

1591 ワード

説明
素数の範囲内のすべての双晶素数を与えるグループ数を見つけるプログラムを書きます.一般に、双晶素数とは、2つの素数の距離が2であり、近いものはこれ以上近づけない隣接素数を指す.一部の子供靴は問題を見るとプログラムを書き始め、問題をよく見ないで、私たちは問題を読むのがまじめではない子供靴を抑えるために、2つの素数が隣接して1のも双子の素数になります.
入力
第1行はN(0次の試験データのセットはmを与え、mを見つける前のすべての双晶素数を表す.(0
しゅつりょく
各試験データ出力のセットは1行を占め、この挙動mの範囲内のすべての双晶素配列数である.
サンプル入力
1
14

サンプル出力
4
#include 
#include 

int func(int);
int main(void)
{
	int n, m, i, j, num;
	int buf[100000]={0};
	scanf("%d", &n);

	j=0;
	buf[j++]=2;
	/* 2 1000000        */
	for(i=3; i<1000001; i += 2){
		if(func(i) == 1){
			buf[j++] = i;
		}
	}

	while(n--){
		num=0;
		scanf("%d", &m);
		for(i=1; i<=m; i++){
			if(buf[i]>m){
				break;
			}
			if((buf[i]-buf[i-1] == 1) || (buf[i]-buf[i-1] == 2)){
				num++;
			}
		}

		printf("%d
", num); } return 0; } /* */ int func(int n) { if(n<2){ return -1; } int i; for(i=2; i<=sqrt(n); i++){ if(n%i==0){ return 0; } } return 1; }
     
 
#include  #include using namespace std; bool vis[1000010]; int main() { int n=1000010; int m =sqrt(n+0.5); int c=0; for(int i =2;i<=m;i++) if(!vis[i]) { for (int j = i*i;j<=n;j+=i) vis[j]=1; } cin>>n; while(n--) { int count=0,m; cin>>m; for(int i=3;i3) cout<