读书人

人民了力气是强大的

发布时间: 2012-09-27 11:11:17 作者: rapoo

人民了力量是强大的
怎样编写:在判断完一个数是可逆素数后,将可逆素数变成两个素数之和
拜托大家了

[解决办法]

C/C++ code
#include <stdio.h>#include <assert.h>#include <math.h>int isPrime(int n){    assert(n > 1);    int count = 0;    for (int i = 2; i <= n; i++)    {        if (n % i == 0)            count++;        if (count == 2)            return 0;    }    return 1;}int len(int n){    int l = 0;    while (n/10)    {        n /= 10;        l++;    }    return l + 1;}int rev(int n){    int r, ret = 0;    while (n)    {        r = n % 10;        ret += r * pow(10, len(n)-1);        n = n / 10;    }    return ret;}int isRevPrime(int n){    if (!isPrime(n))        return 0;    if (!isPrime(rev(n)))        return 0;    return 1;}int main(void){    for (int i = 2; i < 100; i++)        printf("%3d%6s\n", i, isRevPrime(i)? "Yes": "No");    return 0;}
[解决办法]
C/C++ code
#include <iostream>#include <string>#include <vector>using namespace std;typedef struct _prime_pair{    int number1;    int number2;}prime_pair;bool is_prime(int x)                // 判断一个数是否为素数{      if (x == 1)    return false;        // 1不是素数    bool result = true;    for (int i = 2; i * i <= x; i++)    {        if ( x % i == 0)        {            result = false;            break;        }    }    return result;}bool is_reverse_prime(int x){    int reverse_number = 0;    char temp[20] = {0};    if(!is_prime(x)) return false;    memset(temp, 0, 20);    itoa(x, temp, 10);    string str(temp);    reverse(str.begin(), str.end());    memset(temp, 0, 20);    strcpy(temp, str.c_str());    reverse_number = atoi(temp);    if(!is_prime(reverse_number)) return false;    return true;}vector<prime_pair> composition(int x){    vector<prime_pair>  vpr;    ++x;    for(int i = 2; i < x; ++i)    {        if(is_prime(i) && is_prime(x - i))        {            prime_pair pp = {i, x - i};            vpr.push_back(pp);        }    }    return vpr;}int main(int argc, char* argv[]){    int number;    vector<prime_pair> vpr;    while(1)    {        cin.clear();        cin.sync();        cout << "Please input a number, or enter 0 to quit." << endl;        cin >> number;        if(number == 0) break;        // 如果输入0就退出循环        // 判断是否为素数        if(is_prime(number))        {            cout << number << " is a prime number" << endl;            // 判断是否为可逆素数            if(is_reverse_prime(number))            {                cout << number << " is a reverse prime number" << endl;                // 将number + 1拆分为两个素数之和                vpr = composition(number);                cout << number << " + 1 = " << number + 1 << " can be composed by the following prime number pairs:" << endl;                for(vector<prime_pair>::iterator iter = vpr.begin(); iter != vpr.end(); ++iter)                {                    cout << number + 1 << " = " << iter->number1 << " + " << iter->number2 << endl;                }            }            else            {                cout << number << " is not a reverse prime number" << endl;            }        }        else        {            cout << number << " is not a prime number" << endl;        }    }    return 0;} 

读书人网 >C语言

热点推荐