摘要:
题意:给出一个进制,一个数的最低位,和另外的一个数,比如10进制,第一个数字的最低位是7,第二个数字是4,和规则(XXXXX7 * 4 = 7XXXXX,例子: 179487 * 4 = 717948)求出第一个数字的最小长度。看起来很难,其实动笔写写就明白了。输入k,m,n,原来的数字为s,因为s的最后一位为m,则s*n的最后一位为s*n%k,而s*n%k又是s的倒数第二位,这样又可以计算出ans*n的倒数第二位;以此类推,直到乘积+原来的进位==最低位。代码如下: 1 #include<iostream> 2 3 using namespace std; 4 5 int mai 阅读全文
摘要:
设n=a*b,则a趟去的时候打开灯,b趟去的时候关上,相互抵消,当且仅当a=b时,第n个灯只开不关,即n为完全平方数。代码如下: 1 #include<iostream> 2 #include<cmath> 3 4 using namespace std; 5 6 int main() 7 { 8 long long n, m; 9 while(cin >> n, n)10 {11 m=sqrt(n);12 if (m*m == n) cout << "yes" << endl;13 else cout <& 阅读全文
摘要:
看懂上图就出题了,注意给出的数字很长,可以用字符数组存放 。代码如下: 1 #include<iostream> 2 #include<cmath> 3 #include<cstring> 4 5 using namespace std; 6 7 int main() 8 { 9 int n, s;10 int i;11 char str[40];12 while(cin >> str, strcmp(str, "0"))13 {14 s=0;15 n=strlen(str);16 for (i=0; ... 阅读全文
摘要:
1 #include<iostream> 2 #include<cmath> 3 4 using namespace std; 5 6 int prime(int n) 7 { 8 int i; 9 for (i=2; i<sqrt(n)+1; i++)10 {11 if (n%i == 0) return 0;12 }13 return 1;14 }15 16 int main()17 {18 int n, i;19 int cnt;20 while(cin >> n, n)21 {22 ... 阅读全文
摘要:
题意:给一个 p 和 一个 a,如果这个p 本身就是一个素数,就输出 no,如果不是素数,那么计算( a ^ p) % p 如果结果等于 a 那么输出 yes 否则输出 no。快速幂取模就是在O(logn)内求出a^n mod b的值。算法的原理是(a*b) mod c=(a mod c)*(b mod c)mod c。代码如下: 1 #include<iostream> 2 #include<cmath> 3 4 using namespace std; 5 6 int prime(long long n) 7 { 8 int i; 9 for (i=2; i< 阅读全文
摘要:
错排: 当n个编号元素放在n个编号位置, 元素编号与位置编号各不对应的方法数用M(n)表示, 那么M(n-1)就表示n-1个编号元素放在n-1个编号位置, 各不对应的方法数, 其它类推. 第一步, 把第n个元素放在一个位置, 比如位置k,一共有n-1种方法; 第二步,放编号为k的元素,这时有两种情况. 1,把它放到位置n,那么,对于剩下的n-2个元素,就有M(n-2)种方法; 2,不把它放到位置n,这时,对于这n-2个元素,有M(n-1)种方法; 综上得到 M(n)=(n-1)[M(n-2)+M(n-1)] 特殊地,M(1)=0,M(2)=1最小的几个错排数是:D... 阅读全文
摘要:
1 #include<iostream> 2 3 using namespace std; 4 5 int gcd(int a, int b) 6 { 7 return b?gcd(b, a%b):a; 8 } 9 10 int main()11 {12 int a, b, c, d, m, k;13 int n;14 cin >> n;15 while(n--)16 {17 cin >> a >> b >> c >> d;18 int t=gcd(b,d);19 m=a*d/t+b*c/t;... 阅读全文
摘要:
求a/b与c/b的最小公倍数。要求最小公倍数,那么结果肯定是分子尽量小,即 求a , c 的最小公倍数, 分母尽量大, 即求 b , d 的最大公约数。、求最大公约数:int gcd(int a, int b){ return b?gcd(b, a%b):a;}代码: 1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 int gcd(int a, int b) 7 { 8 return b?gcd(b, a%b):a; 9 }10 11 int lcm(int a, int b)12 阅读全文
摘要:
代码: 1 #include<iostream> 2 3 using namespace std; 4 5 long long comb(long long m, long long n) 6 { 7 long long s=1; 8 m=n-m>m?m:n-m; 9 long long k=1, i;10 for (i=0; i<m; i++)11 {12 s*=n-i;13 while(k <=m && s%k==0)14 {15 s/=k;16 k+... 阅读全文
摘要:
差不多懂了,解析过程别人写了,代码自己写的。在正整数n的所有不同划分中,将最大加数n1不大于m的划分个数记为q(n,m)。可以建立q(n,m)的如下递归关系:<1> q(n,m) = 1, n >= 1当最大加数n1不大于1时,任何正整数n只有一种划分形式,n = 1 + 1 + 1 +...+ 1<2> q(n,m) = q(n,n), m >= n最大加数n1实际上不能大于n<3> q(n,n) = 1 + q(n,n - 1)正整数n的划分由n1 = n的划分和n1 < n - 1的划分组成<4> q(n,m) = q(n 阅读全文