B.双阶乘
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define hh ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef long long LL;
using namespace std;
int main()
{
hh;
LL res=1;
for(LL i=1; i<=2021; i=i+2)
{
res=res*i%100000;
}
cout<<res<<endl;
return 0;
}
C.格点
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define hh ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef long long LL;
using namespace std;
int main()
{
hh;
LL res=0;
for(LL i=1;i<=2021;i++)
{
for(LL j=1;i*j<=2021;j++)
res++;
}
cout<<res<<endl;
return 0;
}
D.整数分解
方法一:
隔板法,C(2020,4);
如果求的是非负整数,则可拆分为任意多个的正整数
即x1+x2+x3+x4+x5=2021
C(2021+5-1,2021)
方法二:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define hh ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef long long LL;
using namespace std;
LL res=0;
int main()
{
for(LL i=1; i<2021; i++)
{
for(LL j=1; i+j<2021; j++)
{
for(LL k=1; i+j+k<2021; k++)
{
//先分好三堆,即i,j,k确定
LL m=2021-i-j-k;
//剩下两堆,用一个隔板隔开,有m-1的位置,即m-1种方案
res=res+(m-1);
}
}
}
cout<<res<<endl;
return 0;
}
F.特殊年份
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define hh ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef long long LL;
using namespace std;
int year[10];
int main()
{
hh;
int res=0;
for(int i=0; i<5; i++)
{
cin>>year[i];
int y=year[i];
int q=y/1000%10;
int b=y/100%10;
int s=y/10%10;
int g=y/1%10;
if(q==s&&g-1==b)
res++;
}
cout<<res<<endl;
return 0;
}
G.小平方
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define hh ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef long long LL;
using namespace std;
LL n,res=0;
int main()
{
hh;
cin>>n;
for(int i=1;i<n;i++)
if(i*i%n*2<n)
res++;
cout<<res<<endl;
return 0;
}
H.完全平方数
1.暴力,过一半样例
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define hh ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
typedef long long LL;
using namespace std;
int main()
{
hh;
LL n;
cin>>n;
for(int i=1;i<=n;i++)
{
LL a=n*i;
LL b=sqrt(a);
if(fabs(a-b*b)<1e-8)
{
cout<<i<<endl;
break;
}
}
return 0;
}
2.巧暴
完全平方数的性质:除 1 外,一个完全平方数分解质因数后,各个质因数的指数都是偶数,如果一个数质分解后, 各个指数都为偶数, 那么它肯定是个平方数。
做法:把质因数指数为奇数的项,补为指数为偶数
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define hh ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef long long LL;
using namespace std;
LL n,res=1;
int divid(LL n)
{
for(int i=2; i<=n/i; i++)
{
if(n%i==0)
{
//s为质因子指数的个数
int s=0;
while(n%i==0) s++,n=n/i;
if(s%2==1) res=res*i;
}
}
//如果在上面for循环除完偶数指数的质因数后,还剩下一个大于1的因子(指数一定是奇数),因此res再乘一个n
if(n>1) res*=n;
return 0;
}
int main()
{
hh;
LL n;
cin>>n;
divid(n);
cout<<res<<endl;
return 0;
}