关于素数问题
本来是要解决一个给定一个数求其最大素数因子的问题,结果题目理解错了,以为是求最大素数,绕了个弯,不过收获也多。
首先是数据类型问题。给定的数是千亿级别的(十进制表示有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"); }

浙公网安备 33010602011771号