您的位置:首页 > 其它

HDU 2012 - 素数判定 ( 打表 )

2013-11-25 10:01 344 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2012

首先让我们来看看这些都是什么数

#include <stdio.h>

int main(void)

{
int i, c;
for (c = 1, i = -39; i <51; i++)
{
printf("%-5d", i * i + i + 41);
if (c++ % 10 == 0) putchar('\n');
}
return 0;

}

运行结果:

1523 1447 1373 1301 1231 1163 1097 1033 971  911

853  797  743  691  641  593  547  503  461  421

383  347  313  281  251  223  197  173  151  131

113  97   83   71   61   53   47   43   41   41

43   47   53   61   71   83   97   113  131  151

173  197  223  251  281  313  347  383  421  461

503  547  593  641  691  743  797  853  911  971

1033 1097 1163 1231 1301 1373 1447 1523 1601 1681

1763 1847 1933 2021 2111 2203 2297 2393 2491 2591

最大的数是2591,数据量非常小。所以判断素数的函数也不同这么花哨了。呵呵。

对刚才的代码稍作修改,就能得到其是否为素数的判断矩阵:

#include <stdio.h>

int isprime(int n)

{
int i;

if (n < 2) return 0;
for (i = 2; i * i <= n; i++)
{
if (n % i == 0)
return 0;
}

return 1;

}

int main(void)

{
int i, c;
for (c = 1, i = -39; i <51; i++)
{
printf("%-2d", isprime(i * i + i + 41));
//printf("%-5d", i * i + i + 41);
if (c++ % 10 == 0) putchar('\n');
}
return 0;

}

运行结果:

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 0

0 1 1 0 1 1 1 1 0 1

把结果保存入一个数组里,直接提交。

#include<stdio.h>
#include<string.h>

int main(void)
{
int m, n;
int x[] =
{
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1
};

while (scanf("%d%d", &m, &n), m || n)
{
for (m += 39, n += 39; x[m] && m <= n ; m++);
puts(m > n ? "OK" : "Sorry");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu2012 ACM