标题:【求助】c++回文素数怎么做?
只看楼主
asdfaad
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:25
专家分:0
注 册:2018-12-21
结帖率:57.14%
已结贴  问题点数:10 回复次数:5 
【求助】c++回文素数怎么做?
回文质数(选做)
(时间限制:1000ms 内存限制:65536KB)
统计
描述
因为373既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。请你写一个程序来找出范围[a,b](5 <= a < b <= 100,0)间的所有回文质数。


输入
输入:一行,表示区间a,b。

输出
输出:回文质数列表,一行一个。

难度
较难

输入示例
5 300

输出示例
5
7
11
101
131
151
181
191
搜索更多相关主题的帖子: c++ 回文 素数 质数 输入 
2019-01-23 21:06
ZJYTY
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:92
专家分:700
注 册:2018-12-20
得分:10 
程序代码:
#include<iostream>
#include<vector>
#include<time.h>

using namespace std;

class PrimePalindrome
{
public:
    void PrimeNumbers();
    void PalindromeNumbers();
    void showNumbers();
    void inputNum();
private:
    int beginNum;
    int endNum;
    vector<int> palindrome;
    vector<int> palindromePrime;
};

void PrimePalindrome::PalindromeNumbers()
{
    int s, y = 0;
    for (int i = beginNum; i <= endNum;i++)
    {
        if (i>2 && i%2 == 0)
            continue;
        s = i;
        while (s > 0)
        {
            y = y * 10 + s % 10;
            s = s / 10;
        }
        if (y==i)
        {
            palindrome.push_back(i);
        }
        y = 0;
    }
}

void PrimePalindrome::PrimeNumbers()
{
    int a = 0;
    int i;
    auto itr = palindrome.begin();
    for (itr; itr != palindrome.end(); ++itr)
    {
        for (i = 2; i <= (*itr);++i)
        {
            if ((*itr) % i == 0)
                break;
        }
        if (i == (*itr)){
            palindromePrime.push_back(*itr);
        }
    }
}

void PrimePalindrome::showNumbers()
{
    cout << "回文素数列表:" << endl;
    for (auto itr = palindromePrime.begin(); itr != palindromePrime.end();++itr)
    {
        cout << *itr << endl;
    }
}
void PrimePalindrome::inputNum()
{
    cout << "Input the beginNum : ";
    cin >> beginNum;
    while (!getchar());
    cout << "Input the endNum : ";
    cin >> endNum;
    while (!getchar());
}

int main()
{
    clock_t start, finish;
    double totaltime;
    
    PrimePalindrome pp;
    pp.inputNum();
    start = clock();
    pp.PalindromeNumbers();
    pp.PrimeNumbers();
    pp.showNumbers();

    finish = clock();
    totaltime = (double)(finish - start) / CLOCKS_PER_SEC;
    cout << "\n此程序的运行时间为" << totaltime << "秒!" << endl;
    getchar();
}



测试范围2-100000,内存占用804K(任务管理器显示)

-------------------------------若有不当之处,敬请谅解-------------------------------
2019-01-25 10:14
asdfaad
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:25
专家分:0
注 册:2018-12-21
得分:0 
回复 2楼 ZJYTY
auto itr = palindrome.begin();
这句报错了
2019-01-25 12:12
ZJYTY
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:92
专家分:700
注 册:2018-12-20
得分:0 
回复 3楼 asdfaad
报什么错误?

若不支持auto,自己定义迭代器试一试:vector<int>::iterator itr

-------------------------------若有不当之处,敬请谅解-------------------------------
2019-01-25 13:30
asdfaad
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:25
专家分:0
注 册:2018-12-21
得分:0 
回复 4楼 ZJYTY
我用的dev-c++
是把报错的那段换成你写的是吗
2019-01-25 13:40
ZJYTY
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:92
专家分:700
注 册:2018-12-20
得分:0 
回复 5楼 asdfaad
这两个地方用到了auto

程序代码:
void PrimePalindrome::PrimeNumbers()
{
    int a = 0;
    int i;
    vector<int>::iterator itr = palindrome.begin();
    for (itr; itr != palindrome.end(); ++itr)
    {
        for (i = 2; i <= (*itr);++i)
        {
            if ((*itr) % i == 0)
                break;
        }
        if (i == (*itr)){
            palindromePrime.push_back(*itr);
        }
    }
}

void PrimePalindrome::showNumbers()
{
    cout << "回文素数列表:" << endl;
    for (vector<int>::iterator itr = palindromePrime.begin(); itr != palindromePrime.end();++itr)
    {
        cout << *itr << endl;
    }
}

-------------------------------若有不当之处,敬请谅解-------------------------------
2019-01-25 13:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492820-1-1.html




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

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