2017-07-16 8 views
0

Ich versuche, die folgende Serie 4 6 12 18 30 42 60 72 .... bis n in C-Sprache zu drucken. Seine Logik ist einfach; wir müssen die Zahl so drucken, dass die vorhergehende und die folgende Zahl prim sein sollte! Aber der folgende Code ist keine Schleife nach dem Drucken der 4. Was ist falsch im folgenden Code?Twin Primzahlen C Code

#include <stdio.h> 

int main(){ 
    int n, i, j, p2, k; 
    int count1=0, count2=0; 
    printf("enter the number:\n"); 
    scanf("%d",&n); 
    for(i=3;i<n;i++){ 
     for(j=2;j<i;j++){ 
      if(i%j==0){ 
       count1++; 
       break; 
      } 
     } 
     p2=i+2; 
     for(k=2;k<i;k++){ 
      if(p2%k==0){ 
       count2++; 
       break; 
      } 
     } 
     if(count1==0 && count2==0){ 
      printf("%d",i+1); 
     } 

    } 
} 
+1

Alle Primzahlpaare nach 3 und 5 (beginnend mit 5 und 7) haben die Form 6x ± 1 für eine ganze Zahl x. Wie wirst du die Primalität bestimmen - solltest du eine Funktion haben, das zu tun? Sie könnten dann ein Vielfaches von 6 durchlaufen und die Primzahl der ± 1 Werte überprüfen, wenn beide Primzahlen sind. Da die Werte 6x ± 1 immer ungerade sind, müssen Sie die Teilbarkeit nicht durch 2 überprüfen. und (durch Konstruktion) sind sie auch nicht durch 3 teilbar. Das kann die Überprüfung der Primzahl beschleunigen. In der ersten inneren Schleife können Sie auch 'j * j

Antwort

1

Sie müssen nur Zähler am Ende der Schleife auf 0 setzen

#include<stdio.h> 
int main(){ 
int n, i, j, p2, k; 
int count1=0, count2=0; 
printf("enter the number:\n"); 
scanf("%d",&n); 
for(i=3;i<n;i++){ 
    for(j=2;j<i;j++){ 
     if(i%j==0){ 
      count1++; 
      break; 
     } 
    } 
    p2=i+2; 
    for(k=2;k<i;k++){ 
     if(p2%k==0){ 
      count2++; 
      break; 
     } 
    } 
    if(count1==0 && count2==0){ 
     printf("%d ",i+1); 
    } 
    count1=0; count2=0; 
} 
} 
0

Ihr Code richtig ist, stellen nur count1 und count2 zu am Ende die äußere für Schleife.

können Sie es auch so versuchen. Dieser Code ist in Java. Sie können es in C umwandeln. Logik bleibt gleich. für Arraylist nehmen Arrays fester Länge gleich n.

import java.util.*; 
class prime 
    { 
    public static void main(String[] args){ 

     int n, i, j, p2, k,o; 
     ArrayList<Integer> prime = new ArrayList<Integer>(); 
     ArrayList<Integer> series = new ArrayList<Integer>(); 
     int count1=0, count2=0; 
     Scanner s = new Scanner(System.in); 
     System.out.println("enter the number:\n"); 
      n=s.nextInt(); 
     if(n<3) 
     { 
      System.out.println("prime numbers start from 3"); 
     } 
     for(i=3;i<=n;i++) 
     { 
     for(j=2;j<i;j++) 
     { 
      if(i%j==0) 
      { 
      count1=1; 
      break; 
      } 

     } 
     if(count1==0) 
     { 
     prime.add(i); 
     } 
     count1=0; 
     } 

     for(k=0;k<prime.size()-1;k++) 
     { 

       int prdsr=prime.get(k); 
       int sucsr=prime.get(k+1); 
       if((sucsr-prdsr)==2) 
       { 
        series.add((prdsr+1)); 
       } 

     } 

     for(o=0;o<series.size();o++) 
     { 
     System.out.print(" "+series.get(o)); 
     } 
    } 
}