今天带给大家一篇麦森数的题解
先看题
这个一眼看过去,应该会用到两种算法:高精度与快速幂,前面由相关的讲解
#include <stdio.h>
# include <string.h>
# include <math.h>
int main (void)
{
int p=0;
scanf("%d",&p);
int a[10000]={0};
a[0]=2;
printf("%d\n",(int)(1.0*p*log10(2))+1);
int c[10000]={0};
c[0]=1;
int x[10000]={0};
int i,j,l1=1,l2=1,k;
//整体框架是快速幂,在之中穿插高精度
while(p>0)
{
if(p%2==1)
{
memset(x,0,sizeof(x));
//高精度乘法
for(i=0;i<500;i++)
{
for(j=0;j<500;j++)
{
x[i+j]+=a[i]*c[j];
if(x[i+j]>9)
{
x[i+j+1]+=x[i+j]/10;
x[i+j]%=10;
}
}
}
//这是可以将x中的值放到c中
memcpy(c,x,sizeof(x));
}
p/=2;
//高精度乘法
//将零赋值给x
memset(x,0,sizeof(x));
for(i=0;i<500;i++)
{
for(j=0;j<500;j++)
{
x[i+j]+=a[i]*a[j];
if(x[i+j]>9)
{
x[i+j+1]+=x[i+j]/10;
x[i+j]%=10;
}
}
}
memcpy(a,x,sizeof(x));
}
c[0]=c[0]-1;
for(i=499;i>=0;i--)
{
printf("%d",c[i]);
if(i%50==0)
{
printf("\n");
}
}
return 0;
}
加油!!!(这篇有点太水了,最近开新算法,不好意思)