noip2003 麦森数 (数论,高精乘单精)
2015-08-29 14:31
323 查看
A1146. 麦森数
时间限制:1.0s 内存限制:256.0MB
总提交次数:883
AC次数:218 平均分:41.60
将本题分享到:
查看未格式化的试题 提交 试题讨论
试题来源
NOIP2003 普及组
问题描述
形如2P-1的素数称为麦森数,这时P一定也是个素数。但反过来不一定,即如果P是个素数,2P-1不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是P=3021377,它有909526位。麦森数有许多重要应用,它与完全数密切相关。
任务:从文件中输入P(1000<P<3100000),计算2P-1的位数和最后500位数字(用十进制高精度数表示)
输入格式
文件中只包含一个整数P(1000<P<3100000)
输出格式
第一行:十进制高精度数2P-1的位数。
第2-11行:十进制高精度数2P-1的最后500位数字。(每行输出50位,共输出10行,不足500位时高位补0)
不必验证2P-1与P是否为素数。
样例输入
1279
样例输出
386
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000104079321946643990819252403273640855
38615262247266704805319112350403608059673360298012
23944173232418484242161395428100779138356624832346
49081399066056773207629241295093892203457731833496
61583550472959420547689811211693677147548478866962
50138443826029173234888531116082853841658502825560
46662248318909188018470682222031405210266984354887
32958028878050869736186900714720710555703168729087
代码:
#include<cstdio>
#include<cmath>
#include<algorithm>
#define maxn 100
#define len 100000
using namespace std;
int p,a[maxn+10],b[11];
void multiply(int x)
{
int i,j,k,last=0;
k=min(a[0],maxn);
for(i=1;i<=k;i++)
{
a[i]=a[i]*x+last;
last=a[i]/len;
a[i]%=len;
}
if(last>0 && a[0]<maxn)a[++a[0]]=last;
}
void work()
{
int i,j,k;
scanf("%d",&p);
k=int(log10(2)*p)+1;
printf("%d",k);
a[0]=1,a[1]=1;
for(b[0]=i=1;i<=10;i++)b[i]=b[i-1]<<1;
while(p>=10)multiply(b[10]),p-=10;
if(p>0)multiply(b[p]);
a[1]-=1;
for(i=maxn;i>=1;i--)
{
if(i%10==0)printf("\n");
printf("%05d",a[i]);
}
printf("\n");
return 0;
}
时间限制:1.0s 内存限制:256.0MB
总提交次数:883
AC次数:218 平均分:41.60
将本题分享到:
查看未格式化的试题 提交 试题讨论
试题来源
NOIP2003 普及组
问题描述
形如2P-1的素数称为麦森数,这时P一定也是个素数。但反过来不一定,即如果P是个素数,2P-1不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是P=3021377,它有909526位。麦森数有许多重要应用,它与完全数密切相关。
任务:从文件中输入P(1000<P<3100000),计算2P-1的位数和最后500位数字(用十进制高精度数表示)
输入格式
文件中只包含一个整数P(1000<P<3100000)
输出格式
第一行:十进制高精度数2P-1的位数。
第2-11行:十进制高精度数2P-1的最后500位数字。(每行输出50位,共输出10行,不足500位时高位补0)
不必验证2P-1与P是否为素数。
样例输入
1279
样例输出
386
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000104079321946643990819252403273640855
38615262247266704805319112350403608059673360298012
23944173232418484242161395428100779138356624832346
49081399066056773207629241295093892203457731833496
61583550472959420547689811211693677147548478866962
50138443826029173234888531116082853841658502825560
46662248318909188018470682222031405210266984354887
32958028878050869736186900714720710555703168729087
代码:
#include<cstdio>
#include<cmath>
#include<algorithm>
#define maxn 100
#define len 100000
using namespace std;
int p,a[maxn+10],b[11];
void multiply(int x)
{
int i,j,k,last=0;
k=min(a[0],maxn);
for(i=1;i<=k;i++)
{
a[i]=a[i]*x+last;
last=a[i]/len;
a[i]%=len;
}
if(last>0 && a[0]<maxn)a[++a[0]]=last;
}
void work()
{
int i,j,k;
scanf("%d",&p);
k=int(log10(2)*p)+1;
printf("%d",k);
a[0]=1,a[1]=1;
for(b[0]=i=1;i<=10;i++)b[i]=b[i-1]<<1;
while(p>=10)multiply(b[10]),p-=10;
if(p>0)multiply(b[p]);
a[1]-=1;
for(i=maxn;i>=1;i--)
{
if(i%10==0)printf("\n");
printf("%05d",a[i]);
}
printf("\n");
return 0;
}
相关文章推荐
- python中range函数的使用
- Libraries: Performance vs. Native JS
- CSS选择器优先级
- jquery获取ip地址
- 弹窗实验
- 基于Apache POI 向xlsx写入数据
- 基于Apache POI 向xlsx写入数据
- Linux系统怎么查看网卡的UUID
- JavaScript学习笔记2-附录(转自w3cschool)
- 使用AFNetWorking和ReactiveCocoa对网络请求进行封装(仿煎蛋iOS)(3)
- 用Eclipse创建第一个Spring项目(最最入门级)
- 折腾ubuntu14.04安装jdk1.6记录
- uva 11538 - Chess Queen 先分步还是先分类? 计数问题
- Android-ViewPager使用示例(二)
- java注解
- 模拟JavaWeb过滤器——责任链模式
- 叶存菜鸟笔记之Collections 操作集合工具类一般应用
- iOS导出p12文件
- 【Android UI设计与开发】第04期:引导界面(四)仿人人网V5.9.2最新版引导界面
- PNG-8和PNG-24的抉择