热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HDU4990Readingcomprehension(BestCoderRound#8)

ProblemDescription:Readtheprogrambelowcarefullythenanswerthequestion.#pragmacomment(linker

Problem Description:

Read the program below carefully then answer the question.
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include
#include
#include
#include
#include
#include

const int MAX=100000*2;
const int INF=1e9;

int main()
{
  int n,m,ans,i;
  while(scanf("%d%d",&n,&m)!=EOF)
  {
    ans=0;
    for(i=1;i<=n;i++)
    {
      if(i&1)ans=(ans*2+1)%m;
      else ans=ans*2%m;
    }
    printf("%d\n",ans);
  }
  return 0;
}

 

Input:

Multi test cases,each line will contain two integers n and m. Process to end of file.
[Technical Specification]
1<=n, m <= 1000000000

 

Output:

For each case,output an integer,represents the output of above program.

 

Sample Input:


1 10

3 100


 

Sample Output:


1

5

 

通过观察发现当n为偶数时,第n项为a = (2^(n+1)-2)/3;当n为奇数时,第n项为a = (2^(n+1)-1)/3,由于要对m取余,那么结果ans = a/3%m,这里要用到数模计算公式:a/b%m = a%(b*m)/b,所以ans = a%3m/3。

 


#include
#include
<string.h>
#include

#include

#include

#include

using namespace std;
const int N=1e4+10;
const int INF=0x3f3f3f3f;
const int MOD=1e9+7;
typedef
long long LL;
LL Solve(LL a, LL b, LL m)
///快速幂
{
LL t, sum;
t
= a % m;
sum
= 1;
while (b)
{
if(b&1) sum = (sum*t)%m;
t
= (t*t)%m;
b
/= 2;
}
return sum;
}
int main ()
{
LL n, m, ans;
while (scanf("%lld %lld", &n, &m) != EOF)
{
ans
= Solve(2, n+1, 3*m);
if (n % 2 == 0) ans = (ans-2)/3;
else ans = (ans-1)/3;
printf(
"%lld\n", ans);
}
return 0;
}




推荐阅读
author-avatar
逝去成回忆2502920253
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有