Baccano

  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 日程表

  • friends

  • 搜索

P1017 进制转换

发表于 2019-07-26 | 评论数:

负进制转换结论题,如果出现负数的余数那么设n m r为转换数进制和余数 那么 r-=m,n+=m就行了其他都一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <bits/stdc++.h>
using namespace std;
void change(int n,int m)
{
if(n==0)
return;
int r=n%m;
if(r<0)
r-=m,n+=m;
change(n/m,m);
char c;
if(r>=10)
c=r-10+'A';
else
c=r+'0';
printf("%c",c);
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
printf("%d=",n);
change(n,m);
printf("(base%d)",m);
}

矩阵快速幂模板

发表于 2019-07-26 | 评论数:

解决大斐波那契数问题,我线代没学所以不是很理解这玩意,只好先记住以下板子了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <cstdio>
using namespace std;
struct node
{
long long a[3][3];
};
node mul(node a,node b)
{
node c;
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
{
c.a[i][j]=0;
for(int k=1;k<=2;k++)
c.a[i][j]+=(a.a[i][k]*b.a[k][j]);
c.a[i][j]%=1000000007;
}
return c;
}
node qp(node a,int b)
{
node ans;
ans.a[1][1]=ans.a[1][2]=ans.a[2][1]=1;
ans.a[2][2]=0;
while(b)
{
if(b&1)
ans=mul(ans,a);
a=mul(a,a);
b>>=1;
}
return ans;
}
int main()
{
int n,t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n==-1)
break;
node now;
now.a[1][1]=now.a[1][2]=now.a[2][1]=1;
now.a[2][2]=0;
if(n==0)
{
printf("0\n");
continue;
}
if(n<=2&&n>0)
printf("1\n");
else
printf("%d\n",qp(now,n-2).a[1][1]);
}
}

莫比乌斯反演证明

发表于 2019-07-24 | 评论数:

POJ-1845 Sumdiv (基础数论综合)

发表于 2019-07-24 | 评论数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
const ll mod=9901;
ll p,bk[5005],sum[5005],q[5005];
void fj(ll x)
{
p=0;
memset(sum,0,sizeof(sum));
for(int i=2;i*i<=x+1;i++)
{
if(x%i==0)
{
q[++p]=i;
while(x%i==0)
sum[p]++,x/=i;
}
}
if(x>1)
q[++p]=x,sum[p]=1;
}
ll qpow(ll a,ll b)
{
ll ans=1;
ll base=a;
while(b)
{
if(b&1)
ans=ans%mod*base%mod,ans%=mod;
base=base%mod*base%mod,base%=mod;
b>>=1;
}
return ans%mod;
}
ll getsum(ll a,ll b)
{
if(b==0)
return 1;
if(b%2==1) //奇数式
return ((1+qpow(a,(b+1)/2))*getsum(a,(b-1)/2)%mod)%mod;
if(b%2==0) //偶数式
return ((1+qpow(a,b/2))*getsum(a,(b/2)-1)%mod+qpow(a,b))%mod;
}
int main()
{
ll n,m,ans=0;
while(~scanf("%lld%lld",&n,&m))
{
fj(n);
ans=1;
for(int i=1;i<=p;i++)
{
ans=ans%mod*(getsum(q[i],sum[i]*m))%mod;
ans%=mod;
}
printf("%lld\n",ans%mod);
}
}

POJ1061 青蛙的约会(拓展欧几里得)

发表于 2019-07-22 | 更新于 2019-08-09 | 评论数:

19/08/09 更新注意一下如果a的值小于0的话需要两边同时乘以-1这样保证两边都是正数顺便更新一下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
void gcd(ll a,ll b,ll& x,ll& y,ll& d)
{
if(!b)
x=1,y=0,d=a;
else
gcd(b,a%b,y,x,d),y-=a/b*x;
}
int main()
{
ll x,y,n,m,l;
while(~scanf("%lld%lld%lld%lld%lld",&x,&y,&n,&m,&l))
{
ll a=m-n;
ll b=l;
ll c=(x-y);
ll xx,yy,d;
if(a<0)
{
a=-a;
c=-c;
}
gcd(a,b,xx,yy,d);
if(c%d)
printf("Impossible\n");
else
{
xx*=c/d;
b/=d;
printf("%lld\n",(xx%b+b)%b);
}
}
}
1…151617…20
baccano

baccano

一个蒟蒻的小家

98 日志
7 分类
37 标签
RSS
大佬们的博客
  • 老博客
  • 墨墨墨小白
  • Shawnzhou
  • 康宇
  • 惡魔菌の记事簿

来一首舒缓的音乐怎么样?

© 2020 baccano
0%