nyoj 88 汉诺塔(一)【快速幂】

汉诺塔(一)

时间限制:1000 ms  |  内存限制:65535 KB

难度:3

描述

在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。

现在请你计算出起始有m个金片的汉诺塔金片全部移动到另外一个针上时需要移动的最少步数是多少?(由于结果太大,现在只要求你算出结果的十进制位最后六位)

输入
第一行是一个整数N表示测试数据的组数(0<N<20)
每组测试数据的第一行是一个整数m,表示起始时金片的个数。(0<m<1000000000)
输出
输出把金片起始针上全部移动到另外一个针上需要移动的最少步数的十进制表示的最后六位。
样例输入
2
1
1000
样例输出
1
69375

题解:移动步数等于2^N-1
#include<stdio.h>
#include<string.h>
long long f(long long a,int b,int c)
{
    long long ans=1;
    a=a%c;
    while(b)
    {
    	if(b&1)
    	    ans=(ans*a)%c;
    	b/=2;
    	a=(a*a)%c;
    }
    return ans;
}
int main()
{
	int n,m,j,i,t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		printf("%lld\n",f(2,n,1000000)-1);
	}
	return 0;
}

  

时间: 2024-10-09 06:09:53

nyoj 88 汉诺塔(一)【快速幂】的相关文章

NYOJ 88 汉诺塔(一)(递归)

汉诺塔(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵 天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金 片:一次只移动一片,不管在哪根针上,小片必须在大片上面.僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消

NYOJ 88 汉诺塔(一)

#include<stdio.h>const int max =1000000;long long kuaimi(int n){ long long temp=1; long long a=2; while(n>0) { if(n&1) temp=((temp*a)%max); a=((a*a)%max); n>>=1; } return temp;}int main(){ int num; scanf("%d\n",&num); whil

nyoj 1078 汉诺塔(四)[二分图 || 规律 || 暴力 || 贪心]

题目:nyoj 1078 汉诺塔(四) 分析:做这个题目的时候是在图论的题目里面看到的,到时读了题目推了一下,发现好像有点规律,试了一下果然过了. 后来看了一下数据,才50,那么试了一下模拟,也过了. 好像zoj有一道题目卡模拟,模拟的时候必须贪心一下才能过 这道题出题人的意图在于考大家的:二分图最小路径覆盖. 把每一个球看做一个点,然后如果两个和为平方数的话就给这两个点之间连接一条边,然后用一个特殊的匹配算法,类似于匈牙利算法,但是每次找匹配的时候加入一条边上连接的有匹配的话就不能匹配,最后求

NYOJ 93 汉诺塔(三) 【栈的简单应用】

汉诺塔(三) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描写叙述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候.在当中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔. 不论白天黑夜,总有一个僧侣在依照以下的法则移动这些金片:一次仅仅移动一片.无论在哪根针上.小片必须在大片上面.僧侣们预言.当全部的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中

NYOJ 93 汉诺塔(三)

汉诺塔(三) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面.僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而

汉诺塔(一) NYOJ 88

1 #include<stdio.h>//汉诺塔(一)(88) 2 int main(){ 3 int x,m,t=1; 4 scanf("%d",&x); 5 while(x--){ 6 scanf("%d",&m); 7 if(m>10005){ 8 if(m%100000<6){ 9 m=m%10+100000; 10 } 11 else m=m%100000; 12 } 13 while(m--){ 14 t=t*2;

nyoj汉诺塔(二)

汉诺塔(二)题目链接 汉诺塔问题的经典结论:把i个盘子从一个柱子整体移到另一个柱子最少需要步数是 2的i次方减一.那我们这个给定一个初始局面,求他到目标局面(全部移到第三个柱子上)需要的最少步数.怎么办呢!! 分析: 1.总的来说一定是先把最大的盘子移到第三个柱子上, 然后再把第二大的移到柱子3上, 然后再把第三大的盘子移到柱子3上---直到把最小的盘子(1号盘子)移到柱子3上,才算结束. 2.现在设想一下,在移动第k个盘子动作前,柱子上的整体情况, 假设盘子k在柱子1上, 要移到柱子3上, 由

nyoj 汉诺塔(一)

汉诺塔(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面.僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而

AOJ 331.汉诺塔

汉诺塔 Time Limit: 1000 ms   Case Time Limit: 1000 ms   Memory Limit: 64 MBTotal Submission: 892   Submission Accepted: 173 Description 大家都听说过汉诺塔吧?有n个圆盘由小到大排列,套在a柱上,每次只能移动一个圆盘,而且只能大的在下,小的在上,让你把a柱上的圆盘移到b柱,给你一个多余的c柱,问你最少移动多少次才能完成任务. Input 输入有多组数据,每组包括一个整数