关于素数问题

本来是要解决一个给定一个数求其最大素数因子的问题,结果题目理解错了,以为是求最大素数,绕了个弯,不过收获也多。

首先是数据类型问题。给定的数是千亿级别的(十进制表示有12位长),因此用Int,long之类统统不行。所以就去查了下,结果发现在Long以上还有用8bytes存储的数据类型long long等。很无耻地把人家归纳的东西搬过来,方便日后查用。

Type

Size

数值范围

无值型void

0 byte

无值域

布尔型bool    

1 byte

true   false

有符号短整型short [int] /signed short [int]

2 byte

-32768~32767

无符号短整型unsigned short [int]  

2 byte

0~65535

有符号整型int /signed [int]

4 byte

-2147483648~2147483647

无符号整型unsigned [int]

4 byte

0~4294967295

有符号长整型long [int]/signed long [int]

4 byte

-2147483648~2147483647

无符号长整型unsigned long [int]

4 byte

0~4294967295

long long

8 byte

0~18446744073709552000

有符号字符型char/signed char

1 byte

-128~127

无符号字符型unsigned char

1 byte

0~255

宽字符型wchar_t (unsigned short.)

2 byte

0~65535

单精度浮点型float 

4 byte

-3.4E-38~3.4E+38

双精度浮点型double

8 byte

1.7E-308~1.7E+308

long double

8 byte

 

 

  接下来是求最大素数,成功代码如下:

求最大素数
#include<iostream>
#include<math.h>
using namespace std;

void main()
{
    long long n, i;
    long long prime=0;
    cin >> n;
    cout << endl;
    //求最大素数
    for(n=number; n>=2; n--)
    {
        for(j=2; j<n/2; j++)
        {
            if(n%j == 0)
                break;
        }
        if(j == n/2)
        {
            prime = n;
            break;
        }
    }
    cout << prime;
    system("pause");
}

 

   写的时候犯了个错误,把第二层for语句中的j<n/2写成了j<=n/2,结果机器被折腾死了,主要是忘了结束循环之前会有个j++。

  发现题目搞错之后,又理了下思路,把求最大素数因子的代码写出来,这次比较顺利。

 
求最大素数因子
#include<iostream>
#include<math.h>
using namespace std;

void main()
{
    long long n, i;
    long long prime=0;
    cin >> n;
    cout << endl;
    //求最大素数因子
    for(i=2; i<=n; i++)
    {
        while(n%i == 0)
        {
            prime =i;
            n /= i;
        }
        if(n == 1)
            break;
    }
    cout << prime;
    system("pause");
}

 

posted on 2012-12-12 13:32  单倍体  阅读(169)  评论(0)    收藏  举报