前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ACM-ICPC 2018 焦作赛区网络预赛 Give Candies

ACM-ICPC 2018 焦作赛区网络预赛 Give Candies

作者头像
用户2965768
发布2018-09-29 11:35:38
5540
发布2018-09-29 11:35:38
举报
文章被收录于专栏:wymwym

打表发现是2^n-1,但是n很大,借助费马小定理

最后还要除以2,因为是n-1次方,乘以逆元,防止除2出现各种问题(2*逆元=1000000008)

代码语言:javascript
复制
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include<stdio.h>
#include<string.h>
#define MAX 100000
using namespace std;
const long long mod=1e9+7;
char num[100005];
long long quick(long long a,long long b)
{
	long long ret=1;
	for(;b;b=b>>1,a=a*a%mod)
	    if(b&1)
	      ret=ret*a%mod;
	return ret;
}
int main()
{
	int t;
	 scanf("%d",&t);
	while(t--)
	{
	 getchar();
	 long long ans = 0;  
	       scanf("%s", num); 
      
           int len = strlen(num);  
           
           
           for(int i = 0; i < len; ++i)  
           {  
               ans = ans*10 + (num[i]-'0');  
               ans %= (mod-1);  
           }    
     
	  printf("%lld\n",quick(2,ans)*500000004%mod);
	   
	}
	return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年09月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档