
C++程序问题,新手。。求解
问题:如果一个素数可以写成2^p-1的形式,其中p是一个正整数,那么该素数就称为梅森素数。输入一个正整数n(0<=n<=31)输出p<=n的梅森素数的个数例如32#inc...
问题:如果一个素数可以写成2^p-1的形式,其中p是一个正整数,那么该素数就称为梅森素数。
输入一个正整数n(0<=n<=31)
输出p<=n的梅森素数的个数
例如
3
2
#include<iostream>
#include<cmath>
using namespace std;
bool isPrime(int n){
bool flag = true;
if (n <= 1)
flag = false;
else if (n == 2)
flag = true;
else if (n % 2 == 0)
flag = false;
else{
int limit = sqrt(n) + 1;
for (int i = 3; i <= limit; i += 2){
if (n%i == 0){
flag = false;
break;
}
}
}
return flag;
}
int main(){
int n, i = 0;
double p, q;
cin >> n;
if (n >= 0 && n <= 31){
while (n--){
while (isPrime(n)){
p = log(n + 1) / log(2);
q = ceil(p);
if (p - q == 0){
i++;
}
}
}
}
cout << i << endl;
return 0;
}
测试不出来,一改连编译都编不出来了。。跪求大神赐教。。不胜感激 展开
输入一个正整数n(0<=n<=31)
输出p<=n的梅森素数的个数
例如
3
2
#include<iostream>
#include<cmath>
using namespace std;
bool isPrime(int n){
bool flag = true;
if (n <= 1)
flag = false;
else if (n == 2)
flag = true;
else if (n % 2 == 0)
flag = false;
else{
int limit = sqrt(n) + 1;
for (int i = 3; i <= limit; i += 2){
if (n%i == 0){
flag = false;
break;
}
}
}
return flag;
}
int main(){
int n, i = 0;
double p, q;
cin >> n;
if (n >= 0 && n <= 31){
while (n--){
while (isPrime(n)){
p = log(n + 1) / log(2);
q = ceil(p);
if (p - q == 0){
i++;
}
}
}
}
cout << i << endl;
return 0;
}
测试不出来,一改连编译都编不出来了。。跪求大神赐教。。不胜感激 展开
2个回答
展开全部
#include<iostream>
#include<cmath>
using namespace std;
bool isPrime(int n){
bool flag = true;
if (n <= 1)
flag = false;
else if (n == 2)
flag = true;
else if (n % 2 == 0)
flag = false;
else{
int limit = sqrt(n) + 1;
for (int i = 3; i <= limit; i += 2){
if (n%i == 0){
flag = false;
break;
}
}
}
return flag;
}
bool is2cifang(int n) //是2的幂级数
{
while(n)
{
if(n%2==1)
{
return false;
}
n /=2;
if(n==1)
{
return true;
}
}
}
int main(){
int n, i = 0;
double p, q;
cin >> n;
if (n >= 0 && n <= 31){
n++; //否则下面的n--,31这个数就忽略掉了
while (n--){
if (isPrime(n)){
// p = log(n + 1) / log(2); 误差太大,n=7时就结果错误
// q = ceil(p);
// if (p - q == 0){
if(is2cifang(n+1)){
i++;
}
}
}
}
cout << i << endl;
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询