24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1799  |  回复: 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的回帖

sudo

木虫 (正式写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-07 14:44:28
引用回帖:
Originally posted by libralibra at 2011-07-07 03:10:36:
c++的效率还是高
不过初学c++,谁知道还有什么数字,字符串转换的高效方法吗?
第二个子函数中计算rotation number的办法好丑陋

[code] #include <iostream>
using namespace std;

// 素数筛: 返回0- ...

想给L兄提点意见,呃不妥的地方请指正和包涵一下啦

高效率的程序首先要避免的是在大循环里面调用函数,当然可能会牺牲一点可读性,不过inline是个好东西

其次,使用除法和求模的时候,应该心惊胆战地思考一下有没有更好的方法

最后就是一般来说能数值算的东西不要交给字符串啦


题外话:你写的C++程序有C的影子,虽然很多人都有这习惯(有时候一些高手都理直气壮的),但从美感上而言,纯种的C++程序更好一些的~

再另:这个程序在g++下面的话还要
#include
#include
才有sscanf等C函数的声明,编译才能通过
9楼2011-07-07 10:45:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 17 个回答

huycwork

金虫 (著名写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-07 14:43:38
这个题目带有强烈的多线程暗示呀~
漩涡的中心有一块空地,空空的。
2楼2011-07-06 23:31:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-07 14:43:45
matlab使用了primes函数函数不快哦
CODE:
% Elapsed time is 49.161032 seconds.
% ans =
%     55
function result = euler35()
tic;
pm = primes(1000000);
result = 0;
for i=1:length(pm)
    x = pm(i);
    si = num2str(pm(i));
    for j=2:length(si)
        x(end+1) = str2double([si(j:end),si(1:j-1)]);
    end
    x = unique(x);
    if any(~ismember(x,pm)) % use any() is twice faster than all()
        continue;
    end
    result = result+1;
end
toc;
end

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
3楼2011-07-07 00:11:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-07 14:43:53
余泽成(金币+2, 程序强帖+1): 鼓励交流! 2011-07-11 20:35:50
c++的效率还是高
不过初学c++,谁知道还有什么数字,字符串转换的高效方法吗?
第二个子函数中计算rotation number的办法好丑陋
CODE:
#include
using namespace std;

// 素数筛: 返回0-stop的数组,素数位置为1,其余位置为0
// 从第一个非素数开始,直到大于stop的平方根
// 方法是挨着划去当前数的倍数
int *primes(int stop)
{
    int *numlist = new int[stop+1];
    int i;

    for(i=0;i<=stop;++i)
    {
        if(i<2)
            numlist[i] = 0;
        else
            numlist[i] = i;
    }

    i = 2;
    while(i*i<=stop)
    {
        if(numlist[i]>0)
        {
            for(int j=i+1;j<=stop;++j)
                if(numlist[j]%i==0)
                    numlist[j] = 0;
        }
        i++;
    }

    return numlist;
}

// 判断所有循环是否都是素数
bool checkRotation(int n, int *pmlist)
{
    bool flag = true;
    if(n<10) return flag; // 小于10,直接返回true

    char strnum[7] = ""; // <=1,000,000,7位就够
    sprintf(strnum,"%d",n); // 转为字符串

    int len = strlen(strnum); // 长度
    int curNum,i,j;

    char sNewNum[7] = ""; // 旋转数的字符串形式

    for(i=1;i     {
        // 从位置i开始的旋转数
        for(j=0;j         {
            if(i+j                 sNewNum[j] = strnum[i+j];
            else
                sNewNum[j] = strnum[i+j-len];
        }

        sscanf(sNewNum,"%d",&curNum); // 转为数字
        //cout<
        // 判断是否是素数
        if(pmlist[curNum]==0)
        {
            flag = false;
            break;
        }
    }

    return flag;
}

// euler35
int main(int args, char* argv[])
{
    int stop = 1000000;
    int i,num = 0;
    int *pmlist = primes(stop);

    for(i=0;i<=stop;++i)
        if(pmlist[i]>0 && checkRotation(i,pmlist))
            num++;

    cout<<"小于 "<     return 0;
}

结果
CODE:
//小于 1000000 满足条件的数有: 55 个.
//Process returned 0 (0x0)   execution time : 1.703 s
//Press any key to continue.

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
4楼2011-07-07 03:10:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 083000学硕274求调剂 +5 Li李鱼 2026-03-26 5/250 2026-03-27 23:17 by mmm just
[考研] 一志愿211院校 344分 东北农业大学生物学学硕,求调剂 +5 丶风雪夜归人丶 2026-03-26 8/400 2026-03-27 19:22 by 丶风雪夜归人丶
[考研] 化学调剂 +4 爱吃番茄的旭 2026-03-24 5/250 2026-03-27 17:50 by kiokin
[考研] 一志愿 西北大学 总分282 英语一62 求调剂 +7 18419759900 2026-03-25 8/400 2026-03-27 16:38 by 18419759900
[考研] 085600,材料与化工321分,求调剂 +9 大馋小子 2026-03-27 9/450 2026-03-27 14:30 by mmm just
[考研] 085601 材料工程 313分 求调剂 +5 Ong3 2026-03-27 5/250 2026-03-27 12:24 by goldfish51
[考研] 22408 359分调剂 +3 Qshers 2026-03-27 3/150 2026-03-27 12:22 by wxiongid
[考研] 材料求调剂 +8 @taotao 2026-03-21 8/400 2026-03-27 11:21 by wangjy2002
[考研] 求调剂,一志愿 南京航空航天大学大学 ,080500材料科学与工程学硕 +4 @taotao 2026-03-26 5/250 2026-03-27 08:10 by hypershenger
[考研] 调剂求收留 +7 果然有我 2026-03-26 7/350 2026-03-27 00:26 by wxiongid
[考研] 329求调剂 +5 1() 2026-03-22 5/250 2026-03-26 20:40 by fmesaito
[考研] 081200-11408-276学硕求调剂 +3 崔wj 2026-03-26 3/150 2026-03-26 19:57 by nihaoar
[考研] 279求调剂 +6 红衣隐官 2026-03-21 6/300 2026-03-26 18:32 by 不吃魚的貓
[考研] 材料277求调剂 +5 min3 2026-03-24 5/250 2026-03-26 15:13 by zzll406
[考研] 302求调剂 +4 锦衣卫藤椒 2026-03-25 4/200 2026-03-25 16:29 by 功夫疯狂
[考研] 材料考研调剂生 +3 黄粱一梦千年 2026-03-24 3/150 2026-03-24 17:00 by barlinike
[考研] 一志愿河北工业大学0817化工278分求调剂 +7 jhybd 2026-03-23 12/600 2026-03-24 09:03 by jhybd
[考研] 280分求调剂 一志愿085802 +4 PUMPT 2026-03-22 7/350 2026-03-22 22:13 by 星空星月
[考研] 308求调剂 +3 墨墨漠 2026-03-21 3/150 2026-03-22 16:54 by i_cooler
[考研] 285求调剂 +6 ytter 2026-03-22 6/300 2026-03-22 12:09 by 星空星月
信息提示
请填处理意见