如何打印多个一对素数

这是代码的一部分,仅打印一对素数(1 3)。如何打印所有对直到10000? (1 3)(5 7)...直到10000

    int paarPrim = -1;
for(int max = 2; max < 10000; max++) {
    if(isPrim(max)) {
        if(max - paarPrim <= 2) {
            printf("(%i %i)",paarPrim,max);
        }
            paarPrim = 1;

    }
}
jinnaying 回答:如何打印多个一对素数

#include "stdio.h"

int is_prime(int num)
{
    if (num <= 1) return 0;
    if (num % 2 == 0 && num > 2) return 0;
    for (int i = 3; i < num / 2; i += 2)
    {
        if (num % i == 0)
            return 0;
    }
    return 1;
}




int main()

{

int prim_arry[10000];
int p = 0;

for (int max = 2; max < 10000; max++) 
{
    if (is_prime(max)) 
    {

        prim_arry[p++] =max;
    }
}

for (int i = 0; i < p; i+=2)
{
    if (i == p - 1)
    {
        printf("(%d)",prim_arry[i]);
    }
    else
    {
        printf("(%d,%d)",prim_arry[i],prim_arry[i + 1]);
    }

}
}
,

似乎您需要的是以下内容

#include <stdio.h>

int is_prime( unsigned long long int n )
{
    int prime = n % 2 == 0 ? n == 2 : n != 1;

    for ( unsigned long long int i = 3; prime && i <= n / i; i+= 2 )
    {
        prime = n % i != 0;
    }

    return prime;
}

int main(void) 
{
    const unsigned int UPPER_VALUE = 1000;

    for ( unsigned int i = 2,prev = 0,first = 0; i < UPPER_VALUE; i++ )
    {
        if ( is_prime( i ) )
        {
            if ( first ^= 1 )
            {
                prev = i;
            }
            else if ( i - prev <= 2 )
            {
                printf( "(%u,%u) ",prev,i );
            }
            else
            {
                first = 1;
                prev = i;
            }
        }
    }

    putchar( '\n' );

    return 0;
}

程序输出为

(2,3) (5,7) (11,13) (17,19) (29,31) (41,43) (59,61) (71,73) (101,103) 
(107,109) (137,139) (149,151) (179,181) (191,193) (197,199) (227,229) 
(239,241) (269,271) (281,283) (311,313) (347,349) (419,421) (431,433) 
(461,463) (521,523) (569,571) (599,601) (617,619) (641,643) (659,661) 
(809,811) (821,823) (827,829) (857,859) (881,883) 

在程序中,我使用等于UPPER_VALUE的常量1000而不是10000来限制输出。:)当然,您可以使用等于10000的常量或其他任何值。

您还可以优化循环,将第一对(2,3)的输出移到循环外并像这样定义循环本身

    for ( unsigned int i = 5,first = 0; i < UPPER_VALUE; i += 2 )
本文链接:https://www.f2er.com/3153100.html

大家都在问