#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