24小时热门版块排行榜    

查看: 1706  |  回复: 16
本帖产生 4 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

holmescn

金虫 (正式写手)

[交流] Euler 工程 第三十五题:循环质数 已有4人参与

197 这个质数很特别,因为1, 9, 7这三个数的循环排列也是质数。(197,719,971)

100以下有这样性质的质数有13个:2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, 97.

那么100百万以下这样的数有多少个呢?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★ ★
dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-07 14:44:00
余泽成(金币+2, 程序强帖+1): 鼓励交流! 2011-07-11 20:36:23
算法好的话,python也不慢
CODE:
# Euler Project Problem 35
#

# Gen a prime list
oneMillion = 1000000
primes = range(2, oneMillion+1);

for x in primes:
    if x > 0:
        for n in xrange(2*x, oneMillion+1, x):
            primes[n-2] = 0

primes = [x for x in primes if x > 0]


primes = set(primes)
# Count
count = 0
for n in primes:
    s = str(n)
    flag = True
    for x in xrange(len(s)):
        s = s[1:] + s[0]
        if int(s) not in primes:
            flag = False
            break
    if flag:
        count += 1
        print n
print "Total", count

引用回帖:
Total 55

real        0m1.244s
user        0m1.200s
sys        0m0.040s

5楼2011-07-07 09:11:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)


dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-07 14:44:37
手痒写了个C++版的。好久不写,还得查手册才能完成。一开始用了atoi,可是itoa不是标准函数,自己写又麻烦。然后想用stringstream,也不好玩,最后干脆不用string。

对于vector,这个其实用不用都行。用的话,就省得自己写new/delete了。
CODE:
#include
#include

using namespace std;

void primesLessThan(int n, vector& v) {
    for(int i = 2; i <= n; i++) {
        if(v[i] == 0) continue;

        for(int j = 2*i; j <= n; j += i) {
            if(v[j] == 0) continue;

            v[j] = 0;
        }
    }
}

bool checkRotation(int n, const vector& v) {
    if (n < 10) return true;

    int len = 0, pow = 1;

    for(int tmp = n; tmp > 0; tmp /= 10) {
        len += 1;
        pow *= 10;
    }
    pow /= 10;

    int tmp = n;

    for(int i = 0; i < len - 1; i++) {
        int lastDigit = tmp % 10;
        tmp /= 10;
        tmp += lastDigit * pow;
        if(v[tmp] == 0) {
            return false;
        }
    }
    return true;
}

int main(int argc, char ** argv) {
    int oneMillion = 1000000;
    int oneHundred = 100;
    vector primes(oneMillion+1, 1);
    primesLessThan(oneMillion, primes);

    int count = 0;
    for(int i = 2; i < oneMillion; i++) {
        if(primes[i] == 0) continue;

        if (checkRotation(i, primes)) {
            count += 1;
        }
    }

    cout<<"Total:"< }

这回速度到了0.1s了.
10楼2011-07-07 11:21:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)


dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-07 14:44:45
引用回帖:
Originally posted by tieer at 2011-07-07 09:59:28:
菜鸟正在学习Python,不知道楼上能不能方便给语句写个解释,以便拜读,呵呵,谢谢啊

我试着加了一下,不知道怎么加。我感觉code is comment了啊。如果哪个不明白,请指出,我给解释。
11楼2011-07-07 11:44:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见