Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C循环中的双素数只给出第一个值_C_Loops_For Loop_Primes - Fatal编程技术网

C循环中的双素数只给出第一个值

C循环中的双素数只给出第一个值,c,loops,for-loop,primes,C,Loops,For Loop,Primes,代码如下: #include<stdio.h> void main() { int num1, num2, num3, fac1 = 0, fac2 = 0, fac3 = 0, i; clrscr(); for (num1 = 5; num1 < 100; num1 = num1 + 1) { for (i = 1; i <= num1; i++) { if (num1 % i == 0) { fac1 = fac1 +

代码如下:

#include<stdio.h>

void main() {
  int num1, num2, num3, fac1 = 0, fac2 = 0, fac3 = 0, i;
  clrscr();
  for (num1 = 5; num1 < 100; num1 = num1 + 1) {
    for (i = 1; i <= num1; i++) {
      if (num1 % i == 0) {
        fac1 = fac1 + 1;
      }
    }
    num2 = num1 - 2;
    for (i = 1; i <= num2; i++) {
      if (num2 % i == 0) {
        fac2 = fac2 + 1;
      }
    }
    num3 = num1 + 2;
    for (i = 1; i <= num3; i++) {
      if (num3 % i == 0) {
        fac3 = fac3 + 1;
      }
    }

    if (fac1 <= 2 && fac2 <= 2) {
      printf("%d and %d are twin prime numbers\n", num1, num2);
    }
    if (fac1 <= 2 && fac3 <= 2) {
      printf("%d and %d are twin prime numbers\n", num1, num3);
    }
  }
  getch();
}
#包括
void main(){
int num1,num2,num3,fac1=0,fac2=0,fac3=0,i;
clrsc();
对于(num1=5;num1<100;num1=num1+1){

对于(i=1;i,在num1循环的每次迭代中,您应该清除fac1..3。一旦
fac1
达到2,if子句将不再满足

您的代码还显示了很大的优化空间:所有偶数都不是命中的候选数。如果您在num1=5的情况下运行代码,那么您将测试num1-2和num1+2。稍后在num1=7的情况下,您将再次测试对5-7

下面是我使用单独的prime tester编写的代码:

#include <stdio.h>

bool IsPrime(int num)
{
  int i;
  for (i = 3; i < num; i+=2) 
     if (num % i == 0) return false;
  return true;
}

void main() 
{
   int num;
   clrscr();
   for (num = 3; num < 100; num += 2) 
   {
      if (IsPrime(num) && IsPrime(num+2))
         printf("%d and %d are twin prime numbers\n", num, num+2);
   }
   getch();
}
#包括
bool IsPrime(整数)
{
int i;
对于(i=3;i
它只给出两个结果,因为您查找双素数的代码没有对其他数字重复。您必须对连续的数字重复此过程

#include<stdio.h>

int isPrime(int n);

void main() {

  int num;
  clrscr();
    for(num = 5; num < 100; num = num+1)
    {
        if(isPrime(num) && isPrime(num + 2))
        {            
            printf("%d and %d are twin prime numbers\n", num, num+2);
            num= num + 2; 
        }                
    }    
   getch();
}

int isPrime(int n)
{
    if(n == 1)
    {
        return 0;
    }
    int i;
    for(i = 2; i < n; i++)
    {
        if(n % i == 0)
        {
            // number is not prime
            return 0;
        }
    }

    // number is prime
    return 1;
}
#包括
intisprime(intn);
void main(){
int-num;
clrsc();
对于(num=5;num<100;num=num+1)
{
if(isPrime(num)和&isPrime(num+2))
{            
printf(“%d和%d是双素数\n”,num,num+2);
num=num+2;
}                
}    
getch();
}
intisprime(intn)
{
如果(n==1)
{
返回0;
}
int i;
对于(i=2;i
对于每次迭代(外部循环内),您需要重置计数器,
fac1
fac2
fac3