以下是引用voidx在2011-4-17 15:33:52的发言:
#include <stdio.h>
int main() {
short i, j;
char m[1000] = {0}, ans = 0; // 数组 m 作为标志位,如果 m == 1, 则 i 不是质数。
// 对 1 ~ 999 的所有数字设置标志位,后面要用来判断是不是质数
for (i = 3; i < 1000; i+=2) {
if (!m) {
for (j = i * 3; j < 1000; j += i * 2) {
m[j] = 1;
}
}
}
// i 表示一个三位数的十位,j 表示个位,(i + j) % 10 即为符合题目要求的数字的百位,当然啦,如果 (i + j) % 10 不为 0 的话
for (i = 0; i < 10; i++) {
for (j = 1; j < 10; j += 2) {
if ((i + j) % 10 && !m[(i + j) % 10 * 100 + i * 10 + j]) { // 首先判断 (i + j) % 10 是否为 0,然后检查 (i + j) % 10 * 100 + i * 10 + j 是否为质数
//printf("%d%d%d\n", (i + j) % 10, i, j); //要看是哪些数字只要把行首的注释去掉就好
ans++;
}
}
}
printf("%d\n", ans);
return 0;
}
#include <stdio.h>
int main() {
short i, j;
char m[1000] = {0}, ans = 0; // 数组 m 作为标志位,如果 m == 1, 则 i 不是质数。
// 对 1 ~ 999 的所有数字设置标志位,后面要用来判断是不是质数
for (i = 3; i < 1000; i+=2) {
if (!m) {
for (j = i * 3; j < 1000; j += i * 2) {
m[j] = 1;
}
}
}
// i 表示一个三位数的十位,j 表示个位,(i + j) % 10 即为符合题目要求的数字的百位,当然啦,如果 (i + j) % 10 不为 0 的话
for (i = 0; i < 10; i++) {
for (j = 1; j < 10; j += 2) {
if ((i + j) % 10 && !m[(i + j) % 10 * 100 + i * 10 + j]) { // 首先判断 (i + j) % 10 是否为 0,然后检查 (i + j) % 10 * 100 + i * 10 + j 是否为质数
//printf("%d%d%d\n", (i + j) % 10, i, j); //要看是哪些数字只要把行首的注释去掉就好
ans++;
}
}
}
printf("%d\n", ans);
return 0;
}
思路清晰! 值得学习!!!
善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。