SDUT3899
来源:互联网 发布:淘宝客a5淘客交流 编辑:程序博客网 时间:2024/06/16 09:08
“浪潮杯”山东省第八届ACM大学生程序设计竞赛G题
快速幂或取模运算
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;#define MAXN 1000000007long long add(int n,int m){ long long ans; int i,j; long long x; ans=1; if(m==0) { ans=n; return ans; } if(m==1){ ans=((1+n)*n)/2; return ans; } for(i=2;i<=n;++i) { x=i; for(j=1;j<=m-1;++j) { x=(x*(i%MAXN))%MAXN; } ans=(ans+x)%MAXN; } return ans;}int main(){ int n,m; while(scanf("%d %d",&n,&m)!=EOF) { long long x; x=add(n,m); cout<<x<<endl; } return 0;}
位与:&
位或:|
异或:^
取反:~
左移:<<
右移:>>
下面是快速幂用位运算实现的
去掉最后一位 ¦ (101101->10110) ¦ x >> 1
在最后加一个0 ¦ (101101->1011010) ¦ x < < 1
在最后加一个1 ¦ (101101->1011011) ¦ x < < 1+1
把最后一位变成1 ¦ (101100->101101) ¦ x ¦ 1
把最后一位变成0 ¦ (101101->101100) ¦ x ¦ 1-1
最后一位取反 ¦ (101101->101100) ¦ x ^ 1
把右数第k位变成1 ¦ (101001->101101,k=3) ¦ x ¦ (1 < < (k-1))
把右数第k位变成0 ¦ (101101->101001,k=3) ¦ x & ~ (1 < < (k-1))
右数第k位取反 ¦ (101001->101101,k=3) ¦ x ^ (1 < < (k-1))
取末三位 ¦ (1101101->101) ¦ x & 7
取末k位 ¦ (1101101->1101,k=5) ¦ x & ((1 < < k)-1)
取右数第k位 ¦ (1101101->1,k=4) ¦ x >> (k-1) & 1
把末k位变成1 ¦ (101001->101111,k=4) ¦ x ¦ (1 < < k-1)
末k位取反 ¦ (101001->100110,k=4) ¦ x ^ (1 < < k-1)
把右边连续的1变成0 ¦ (100101111->100100000) ¦ x & (x+1)
把右起第一个0变成1 ¦ (100101111->100111111) ¦ x ¦ (x+1)
把右边连续的0变成1 ¦ (11011000->11011111) ¦ x ¦ (x-1)
取右边连续的1 ¦ (100101111->1111) ¦ (x ^ (x+1)) >> 1
去掉右起第一个1的左边 ¦ (100101000->1000) ¦ x & (x ^ (x-1))
判断奇数 (x&1)==1
判断偶数 (x&1)==0
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define max 1000000007long long pow_H(int i,int m,long long MAXN){ long long base=i; long long x=1; while(m) { if(m&1) x=((x%MAXN)*(base%MAXN))%MAXN; base=((base%MAXN)*(base%MAXN))%MAXN; m=m>>1; } return x;}int main(){ int n,m; int i,j; long long sum=0; cin>>n>>m; for(i=1;i<=n;++i) { long long y=pow_H(i,m,max); sum=((sum%max)+(y%max))%max; } cout<<sum<<endl; return 0;}
- SDUT3899
- javascript初学记---3 应该是函数加点对象 (附带promise解析)
- 写一个函数实现根据下拉列表的变化,更新图片显示
- x86 汇编 之 指令基础 (AT&T格式 / Linux)
- solr-6 查询中的可扩展插件
- ubuntu16.04 出现The program 'rpm' is currently not installed. You can install it by typing
- SDUT3899
- windows8.1+VBox+CentOS共享文件夹
- java.lang.NoClassDefFoundError: Failed resolution of
- Java中ExecutorService和CompletionService区别
- js实现Java中的静态变量
- 如何更快的拉取国内的docker镜像
- 2017.7.8 C组总结
- MySQL中高级知识-MySQL架构介绍
- 【Eternallyc】C++中的sort排序函数