首页 > 其他分享 >P1045麦森数

P1045麦森数

时间:2024-11-17 18:08:34浏览次数:1  
标签:麦森数 int long 60 ull P1045 include

使用对数lg直接估算所求位数, 每次乘以2^60大大加快速度(不够60再乘以更小的)

9*2^60为10,376,293,541,461,622,784刚好不会超ull范围(18,446,744,073,709,551,616)
#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

typedef unsigned long long ull;
ull a[501]={1}; //初始化为1

int main()
{
	int p;
	cin >> p;
	cout << (int)(p*log10(2)) + 1 << endl;//直接用lg估算位数
	
	for(;p > 0;p -= 60)//每次减掉60次幂 
	{
		ull f = 0;//进位
		for(int i = 0;i < 500;i ++)
		{
			if(p > 60) a[i] <<= 60; //一次性乘2^60, 9*2^60为10,376,293,541,461,622,784刚好不会超ull范围(18,446,744,073,709,551,616)
			else a[i] <<= p;//如果剩下的不够60了就不要乘60了,乘p
			a[i] += f;
			f = a[i] / 10;
			a[i] %= 10;
		}
	}
	
	a[0]-=1;
	
	for(int i = 499;i >= 0;i --)
	{
		printf("%d", a[i]);
		if(i % 50 == 0)	puts("");
	}
	
	return 0;
}

标签:麦森数,int,long,60,ull,P1045,include
From: https://www.cnblogs.com/acing/p/18550840

相关文章

  • 洛谷P1045 [NOIP2003 普及组] 麦森数
    形如 2P−12P−1 的素数称为麦森数,这时 PP 一定也是个素数。但反过来不一定,即如果 PP 是个素数,2P−12P−1 不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是 P=3021377P=3021377,它有909526位。麦森数有许多重要应用,它与完全数密切相关。任务:输......
  • P1045 [NOIP2003 普及组] 麦森数极简解法解读
    源代码如下(这个精妙绝伦的算法不是我发现的,而是取自原题解中的某个大佬,在经过一顿学习正常题解后看到,顿觉豁然开朗,原贴:https://www.luogu.com.cn/article/c3u874kg)includeincludeincludeusingnamespacestd;longlonga[501]={1};intmain(){intp;cin>>p;cout<<(......
  • luogu题解:P10456 The Pilots Brothers' refrigerator【缺少 SPJ】
    思路此题题意酷似P10449.费解的开关。https://www.luogu.com.cn/problem/P10449不同之处便是状态连锁改变不同,但做法截然不同,此题是一个\(4\times4\)的矩阵。暴力枚举的复杂度是\(O(10^7)\),即\(2^{16}\times16\times16=16777216\),\(10^7\)的复杂度可以通......
  • 题解:P10450 [USACO03MAR] Best Cow Fences G
    题目链接O(n^3)做法直接暴力枚举长度、起点,再全部跑一边求平均数。附上我丑陋的代码和提交记录,这个代码可以得42分。#include<bits/stdc++.h>usingnamespacestd;constintNR=1e5+5;longlongn,l,a[NR],sum,ave;intmain(){ cin>>n>>l; for(inti......
  • CSP历年复赛题-P1045 [NOIP2003 普及组] 麦森数
    原题链接:https://www.luogu.com.cn/problem/P1045题意解读:要计算2p-1的位数和最后500位,实际上只需要计算2p,两者位数一致,前者比后者个位减1即可,且个位肯定不会是0,比较容易处理。解题思路:如果直接采用高精度乘法计算2p,p最大3.1*106,高精度所用数组最长大概9*105,一共最多计算3.......
  • 洛谷题单指南-模拟和高精度-P1045 [NOIP2003 普及组] 麦森数
    原题链接:https://www.luogu.com.cn/problem/P1045题意解读:要计算2p-1的位数和最后500位,实际上只需要计算2p,两者位数一致,前者比后者个位减1即可,且个位肯定不会是0,比较容易处理。解题思路:如果直接采用高精度乘法计算2p,p最大3.1*106,高精度所用数组最长大概9*105,一共最多计算3.......
  • 麦森数
    [NOIP2003普及组]麦森数题目描述形如的素数称为麦森数,这时一定也是个素数。但反过来不一定,即如果是个素数,不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是,它有909526位。麦森数有许多重要应用,它与完全数密切相关。任务:输入,计算的位数和最后......
  • 麦森数
    [NOIP2003普及组]麦森数题目描述形如的素数称为麦森数,这时一定也是个素数。但反过来不一定,即如果是个素数,不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是,它有909526位。麦森数有许多重要应用,它与完全数密切相关。任务:输入,计算的位数和最后......
  • P1045 麦森数 题解
    传送门前排提醒:本篇题解没有使用压位和快速幂,运用了一种预处理的思想,希望能提供一种新的思路。首先将\(2^{p}-1(d)\)转换为\(1111…111(b)\)。关于第一问:我们先考虑\(2\)进制转\(8\)进制,将每\(3\)位转为\(1\)位,即每\(\log{8}\)位转为\(1\)位。\(2\)进制转......
  • P1045 [NOIP2003 普及组] 麦森数——快速幂
    [NOIP2003普及组]麦森数题目描述形如\(2^{P}-1\)的素数称为麦森数,这时\(P\)一定也是个素数。但反过来不一定,即如果\(P\)是个素数,\(2^{P}-1\)不一定也是素数。到......