2008年12月30日星期二

圆环上求素数

给出一个取数长度L(1<=L<=5),然后从1开始按顺时针方向连续取L个数字,拼成一个长为L位的数,此时共有9个长为L位的数,然后输出这9个数中的素数。
例如:L=2,此时9个长度为2位的数为:
12,23,34,45,56,67,78,89,90.其中素数有:23,67,89

分析:
先根据长度求出9个数,这里注意并没有0打头的数,所以只有9个。使用数组和下标模运算模拟环状的数据结构。使用循环计算出对应的数据,存入结果数组中。遍历数组,确定素数。

C代码:

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

#define LEN 9

int main(int argc, char **argv)
{
int ring[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int re[LEN];
memset(re, 0, sizeof(int) * LEN);
int l, i, j, flg;
scanf("%d", &l);

for (i = 0; i < 10; i++) {
for (j = 0; j < l; j++) {
re[i] = re[i] + ring[(i+j) % 10] * (int)pow((double)10, (double)(l-1-j));
}
}

for (i = 0; i < LEN; i++) {
flg = 1;
for (j = 2; j < re[i]; j++) {
if (re[i] % j == 0) {
flg = 0;
}
}
if (flg) {
printf("%d\t", re[i]);
}
}
printf("\n");

/**
for (i = 0; i < LEN; i++) {
printf("%d\n", re[i]);
}
*/

return 0;
}

没有评论:

发表评论