Author:MTingle
人工智能专业
荃者所以在鱼,得鱼而忘荃;蹄者所以在兔,得兔而忘蹄;言者所以在意,得意而忘 言。吾安得夫忘言之人而与之言哉!
【C语言】旗帜法求解双胞胎数
所谓双胞胎数,是指两素数差为2,则称他们为一对双胞胎数,求指定n以内的双胞胎数。
补充知识:c语言中,通常用0表示假,则不执行下列代码,1表示真,则继续执行代码。
举个例子:
#include
int main()
{
int flag = 0;
if (flag)
{
printf("hehe");
}
return 0;
}
输出结果如下:
因为判断条件flag=0,为假,则不执行打印。
#include
int main()
{
int flag = 1;
if (flag)
{
printf("hehe");
}
return 0;
}
1.输入一个数n,判断n是否大于1,若小于等于1,则输出“ERROR”
int n, i=2, sum = 0, m;
int t,x;
scanf("%d", &n);
if (n <= 1)
{
printf("ERROR");
}
2.在大于1的条件下,先设置一个循环,遍历2–n的数
else
{
for (i = 2; i + 2 <= n; i++)
{
3.设置一个旗帜flag=1,判断这个数x(设为x)是否为素数,若为素数则flag仍为1,继续执行循环,若不是,则令flag=0,不继续执行循环
flag = 1;
m = sqrt(i);
for (j = 2; j <= m; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
4.若x为素数,判断x+2是否为素数,同时根据相应的结果改变flag,x+2为素数,则flag=1继续执行,若x+2不为素数,则令flag=0,不继续进行下列判断
if (flag)
{
m = sqrt(i + 2);
for (j = 2; j <= m; j++)
{
if ((i + 2) % j == 0)
{
flag = 0;
break;
}
}
5.若x,x+2均为素数,则sum(总双胞胎数)++
if (flag)
{
sum++;
printf("第%d个双胞胎数[%d,%d]\n", sum, i, i + 2);
}
}
}
}
printf("一共有%d对", sum);
return 0;
}
#include
#include
int main()
{
int n;
int i, j, m;
int sum = 0, flag;
printf("请输入一个数:\n");
scanf("%d", &n);
if (n <= 1)
printf("ERROR");
else
{
for (i = 2; i + 2 <= n; i++)
{
flag = 1;
m = sqrt(i);
for (j = 2; j <= m; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag)
{
m = sqrt(i + 2);
for (j = 2; j <= m; j++)
{
if ((i + 2) % j == 0)
{
flag = 0;
break;
}
}
if (flag)
{
sum++;
printf("第%d个双胞胎数[%d,%d]\n", sum, i, i + 2);
}
}
}
}
printf("一共有%d对", sum);
return 0;
}
#include
#include
int main()
{
int n, i=2, sum = 0, m;
int t,x;
scanf("%d", &n);
if (n <= 1)
{
printf("ERROR");
}
else
{
for (x = 2; x < n; x++)
{
for (i = 2; i < x; i++)
{
if (x % i == 0)
break;
}
if (i == x )
{
t = 2;
m = x + 2;
for (t = 2; t < m; t++)
{
if (m % t == 0)
break;
}
if (m == t)
{
sum++;
}
}
}
printf("%d", sum);
}
return 0;
}
旗帜法是一种编程中用于判断多种条件同时成立的重要方法,flag=1,则继续判断条件,flag=0则不继续判断条件