前言
难受,我还是一如既往的菜……
A
Des
给定一个正整数 K K K,求出正整数排列 ( A , B , C ) (A,B,C) (A,B,C),使 A × B × C ≤ K A×B×C ≤ K A×B×C≤K的组合个数。
Sol
就,枚举前两个元素 i i i, j j j,第三个元素的范围就是 [ 1 , K / i / j ] [1,K / i / j] [1,K/i/j], 所以直接加上个数 K / i / j K / i / j K/i/j 就好啦。
Code
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define int long long
int k,n,ans;
signed main() {
scanf("%lld",&k);
for(int i = 1; i <= k; i ++) {
n = k / i;
for(int j = 1; j <= k / i; j ++) ans += n / j;
}
printf("%lld\n",ans);
return 0;
}
/*
样例输入1
2
样例输入2
10
样例输入3
31415
样例输出1
4
样例输出2
53
样例输出3
1937281
*/
B
Des
给定三个数 A A A, B B B, C C C,求出 A B C A^{B^C} ABC的个位上的数。
Sol
妈妈我会做小学奥数题了诶!!1(
应该有其他简单多了的算法,但是我懒。
众所周知,次方的个位数只能在 [ 1 , 9 ] [1,9] [1,9] 之间这不是废话吗迟早有一天它会出现循环节的。
所以直接考虑将循环节暴力搞出来并且在计算的时候把循环节记录下来,然后将循环节长度设为模数用快速幂算出 B C B^C BC ,最后