代码背诵:扩展gcd,素数筛,重载运算符
1 同余方程
洛谷
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
void exgcd1(long long a,long long b,long long &x,long long &y){
if(!b){
x=1;y=0;return ;
}
exgcd1(b,a%b,x,y);
int temp=x;
temp=x;
x=y;
y=temp-(a/b)*y;
return;
}
long long a,b,d,x,y;
int main(){
scanf("%lld %lld",&a,&b);
exgcd1(a,b,x,y);
printf("%lld",(x%b+b)%b);
return 0;
}
2 1003 津津的储蓄计划
未AC原因:存钱之后没有减去【审题】
3 1007 阶乘和
【重载运算符】
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int N;
struct node{
int len;
int num[1005];
friend node operator *(node a,int b){
for(int i=1;i<=a.len;i++){
a.num[i]*=b;
}
for(int i=1;i<=a.len;i++){
if(a.num[i]>=10){
a.len=max(a.len,i+1);
a.num[i+1]+=a.num[i]/10;
a.num[i]%=10;
}
}
return a;
}
friend node operator +(node a,node b){
int lena=max(a.len,b.len);
for(int i=1;i<=lena;i++){
a.num[i]+=b.num[i];
}
for(int i=1;i<=lena;i++){
if(a.num[i]>=10){
lena=max(lena,i+1);
a.num[i+1]+=a.num[i]/10;
a.num[i]%=10;
}
}
a.len=lena;
return a;
}
void print(){
for(int i=len;i>=1;i--){
printf("%d",num[i]);
}
}
}tot,jie;
int temp;
int main(){
scanf("%d",&N);
tot.len=jie.len=1;
jie.num[1]=1;
for(int i=1;i<=N;i++){
jie=jie*i;
tot=tot+jie;
}
tot.print();
return 0;
}