網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
題目:
要求:按從小到大的順序輸出所有不超過(guò)2……n?1的梅森數(shù),每行一個(gè)。如果完全沒(méi)有,則輸出“None”。
別人的例子
#include <math.h>
int main() {
int n = 0, m = 0, e = 0,h=0;
int i = 0;
scanf("%d", &n);
int a = (int)pow(2, n) - 1;//最大數(shù)
for (i = 2; i < a; i++) {//數(shù)字挨個(gè)增加
m = 0;
for (e = 2; e <= sqrt(i); e++) {//判斷是不是為素?cái)?shù)
if (i % e == 0) {
m++;
break;
}
}
if (m == 0) {
for (e = 1; e < n; e++) {
if (2.0 == pow(i + 1, 1.0 / (1.0 * e))) {//判斷是否滿足另一個(gè)條件
printf("%d\n", i);
h++;
break;
}
}
}
}
if (h == 0) {
printf("None");
}
return 0;
}
發(fā)現(xiàn)報(bào)錯(cuò): 分析錯(cuò)誤: 我感覺(jué)可能是求梅森數(shù)的思路不對(duì)。
1.for循環(huán)里的i是否需要在循環(huán)外聲明。
2.判斷i是否為素?cái)?shù)的方式可以改為使用線性篩法。
3.在判斷梅森數(shù)時(shí),使用pow函數(shù)求2的冪次方會(huì)影響精度,建議使用位運(yùn)算進(jìn)行優(yōu)化。
4.如果完全沒(méi)有梅森數(shù),應(yīng)該在循環(huán)外輸出“None”。
我的代碼
#include <stdio.h>
#include <math.h>
int main() {
int n = 0, p = 0, flag = 0;
scanf("%d", &n);
for (p = 2; p <n; p++) {
int i = 2, m = 2; //m為當(dāng)前計(jì)算出的2^p-1的值
//線性篩法求2^p-1是否為素?cái)?shù)
while (i <= sqrt(m)) {
if (m % i == 0) {
break; //不是素?cái)?shù),跳出循環(huán)
}
i++;
}
//如果i>sqrt(m)說(shuō)明m是素?cái)?shù)
if (i > sqrt(m)) {
printf("%d\n", m);
flag = 1; //標(biāo)記是否有梅森數(shù)
}
m = (m << 1) + 1; //計(jì)算下一個(gè)2^p-1的值
}
if (!flag) {
printf("None");
}
return 0;
}
顯示部分正確修改過(guò)的代碼
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
cin >> n;
bool flag = false; // 記錄是否有梅森數(shù)
for (int i = 2; i < n; i++)
{
bool isPrime = true; // 記錄i是否為素?cái)?shù)
for (int j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
isPrime = false;
break;
}
}
if (isPrime) // 如果i為素?cái)?shù)
{
int m = i; // 記錄i的值
int sum = 0; // 記錄i的位數(shù)和
while (m > 0)
{
sum += m % 10;
m /= 10;
}
if (sum == i) // 如果i的位數(shù)和等于i本身,則為梅森數(shù)
{
cout << i << endl;
flag = true; // 有梅森數(shù)
}
}
}
if (!flag) // 如果沒(méi)有梅森數(shù)
{
cout << "None" << endl;
}
return 0;
}
原文鏈接:https://juejin.cn/post/7182397968958357565
相關(guān)推薦
- 2022-06-04 Python數(shù)據(jù)處理的三個(gè)實(shí)用技巧分享_python
- 2022-12-24 C++中類的三種訪問(wèn)權(quán)限解析:private、public與protect_C 語(yǔ)言
- 2022-03-24 shell腳本查看k8s日志介紹_linux shell
- 2023-07-13 react中使用高階函數(shù)
- 2022-09-07 R語(yǔ)言列篩選的方法select實(shí)例詳解_R語(yǔ)言
- 2023-01-11 ubuntu如何搭建vsftpd服務(wù)器_FTP服務(wù)器
- 2022-06-14 Flutter網(wǎng)絡(luò)請(qǐng)求Dio庫(kù)的使用及封裝詳解_Android
- 2023-01-02 C語(yǔ)言中讀寫交替時(shí)出現(xiàn)的問(wèn)題分析_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支