| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2962 人关注过本帖
标题:求双向环形素数程序
只看楼主 加入收藏
花生为你付
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2016-7-13
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:7 
求双向环形素数程序
.  双向环形素数
一个n位的整数写成环形,如果按顺时针方向,从任意一位开始,读够n位,得到的都是素数;再按逆时针方向,从任意一位开始,读够n位,得到的也都是素数(素数性“立场最坚定”),则称这个数为n位双向环形素数。
如:两位数13组成的13、31都是素数。三位数337,组成的337、373、733也都是素数。所以13、337就分别是二位、三位的双向环形素数。
求六位的双向环形素数。
搜索更多相关主题的帖子: 顺时针 
2016-07-13 23:02
zx315
Rank: 5Rank: 5
来 自:广东
等 级:职业侠客
威 望:2
帖 子:86
专家分:378
注 册:2016-7-13
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <stdbool.h>
#include <math.h>

const int DIGIT = 6;

bool is_annular_prime(int n);

bool is_prime(int n);

int main(void) {
    for (int i = 100000; i < 1000000; ++i) {
        if (is_annular_prime(i)) {
            printf("%d\n", i);
        }
    }
    return 0;
}

bool is_annular_prime(int n) {
    //a 用来存储数字 n 的每一位数
    int a[DIGIT];
    for (int i = DIGIT - 1; i >= 0; --i) {
        a[i] = n % 10;
        n /= 10;
    }

    int tmp1, tmp2, k;
    bool flag = true;
    for (int j = 0; j < DIGIT; ++j) {
        tmp1 = tmp2 = 0;
        for (k = 0; k < DIGIT; ++k) {
            //顺时针判断
            tmp1 = tmp1 * 10 + a[(j + k) % DIGIT];
            //逆时针判断
            tmp2 = tmp2 * 10 + a[(j - k + DIGIT) % DIGIT];
        }
        if (!((tmp1 == tmp2 && is_prime(tmp1))
              || (is_prime(tmp1) && is_prime(tmp2)))) {
            flag = false;
            break;
        }
    }

    return flag;
}

bool is_prime(int n) {
    int max = sqrt(n);
    bool flag = true;
    for (int i = 2; i < max; ++i) {
        if (n % i == 0) {
            flag = false;
            break;
        }
    }
    return flag;
}

Read The Fucking Source Code~
2016-07-14 00:09
花生为你付
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2016-7-13
收藏
得分:0 
回复 2楼 zx315
谢大神,,👍👍👍
2016-07-14 01:13
花生为你付
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2016-7-13
收藏
得分:0 
程序有一个错误,提示不能打开第二个include文件??为什么呢,
2016-07-14 10:03
zx315
Rank: 5Rank: 5
来 自:广东
等 级:职业侠客
威 望:2
帖 子:86
专家分:378
注 册:2016-7-13
收藏
得分:0 
回复 4楼 花生为你付
是编译器的问题,我用的是 c99 标准,你可以把那个头文件去掉,然后自己定义几个宏

程序代码:
typedef int bool
#define true 1
#define false 0

Read The Fucking Source Code~
2016-07-14 10:18
花生为你付
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2016-7-13
收藏
得分:0 
回复 5楼 zx315
文件.c的时候还是有错误,但是在.cpp下就成功了。谢谢。
2016-07-14 10:54
zx315
Rank: 5Rank: 5
来 自:广东
等 级:职业侠客
威 望:2
帖 子:86
专家分:378
注 册:2016-7-13
收藏
得分:0 
回复 6楼 花生为你付
有可能是那些 for 循环的问题,因为 c99 之后才支持在 for 循环中声明变量,所以你可能要像下面这样把 for 循环改掉:
程序代码:
for (int i = DIGIT - 1; i >= 0; --i) {
        a[i] = n % 10;
        n /= 10;
    }


改成:

程序代码:
int i;
for (i = DIGIT - 1; i >= 0; --i) {
        a[i] = n % 10;
        n /= 10;
    }


即把变量声明放在外面……

你没把错误贴上来,我也不知道,只能猜了~~~

Read The Fucking Source Code~
2016-07-14 11:51
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:10 
应该是标准的问题,我用DEV C++,复制一些有bool类型的程序就不能运行,有时候define int Boolean,也不一定行得通。
另外引用文件头的时候,如果弹出 Cannot open include file: 'stdbool.h': No such file or directory 错误,就表示没找到这个头文件。。。

φ(゜▽゜*)♪
2016-07-14 11:57
快速回复:求双向环形素数程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019784 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved