给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A1 = 能被 5 整除的数字中所有偶数的和;A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1−n2+n3−n4⋯;A3 = 被 5 除后余 2 的数字的个数;A4 = 被 5 除后余 3 的数字的平均数,精确到
n = int(input())for i in range(n): a = int(input()) if a<32768: xmin = a%4 xmax = a%2 if xmin==0 and xmax==0: print("{:.0f} {:.0f}".format(a/4,a/2)) else: print(0,0) else:
"""鸡兔同笼""" n = int(input()) l = list() for k in range(n): a = int(input()) if a%2 != 0: min = max = 0 else: j = a/4 i = a%4/2 min = int(i+j) max = int(a/2) l += [(mi
鸡兔同笼找最多有多少只动物和最少有多少只动物 第一行要接受一个n作为循环条件 使用循环让用户在每一次循环进行一次用户输入脚的总数a 解题思路 既然是判断最多和最少动物 首先要判断脚的总数是否为偶数且是否
既约分数 题目描述 如果一个分数的分子和分母的最大公约数是1,这个分数称为既约分数。例如,3/4,5/2,1/8,7/1都是既约分数。请问,有多少个既约分数,分子和分母都是1到2020之间的整数(包括1和2020) #include<iostream> using namespace std; int gcd(int a,int b) { if(a%b==0) r
最大公约数用欧几里得算法来求: gcd(a,b) = gcd(b,a%b),a>=b & b!= 0: 代码核心: //确保 a > b int gcd(int a,int b){ return b == 0 ? a : gcd(b,a%b); } 最小公约数符号为:lcm(a,b) = ,代码如下: //还是要确保 a > b int lcm(int a,int b){ return a*b/gcd(a,b); }
方一:核心:gcb(a, b) = gcb(b, a%b) class Solution: def gcd(self , a , b ): if a%b == 0: return b else : return self.gcd(b,a%b) 方二:暴力枚举 不知道为什么通过率7/10 class Solution: def gcd(self , a , b ):
题意:P6076 思路: 容斥+dp 有三种下限要求方案数?我们来层层降维。 首先\(ans=(-1)^{c-i}*C_c^i*f[i]\) f[i]表示至多i种颜色且满足另外两限制的方案数。 很多时候我们发现,"随便","至多","至少"要好求很多,而我们要"恰好"时就会用到容斥 \(f[i]=(-1)^{m-i}*n^{C_m^i-1}\) 这里同理降
赋值运算符 = - 可以将符号右侧的值赋值给左侧变量 += - a += 5 相当于 a = a+5 - var str = "hello"; str += "world"; -= - a -= 5 相当于 a = a-5
欧几里得算法: gcd(x,y)=gcd(y,x%y); 边界条件:if(y==0)return x; 证明: 我们设gcd(a,b)=d····(1),a=k*b+c····(2),再令a=k1*d,b=k2*d····(3) 由(2)得c=a-k*b····(4),然后将(1)带入(4)得到:c=k1*d-k*k2*d,即c=(k1-k*k2)*d. 这样就说明,a%b有d这个约数,因为开始
一、快速幂 递归写法 int quickpow(int a,int b,int c) { if(b==1) return a%n; int t=quickpow(a,b/2,c)%n; t=t*t%n; if(b%2==0) return t; else return t*a%n; } 非递归写法 int quickpow(int a,int b,int n) { int ret=1; while(b) { if(b%2==1) ret=ret*a%n; a
欧拉函数 定义 欧拉函数表示 再[1,n-1],这个闭区间中和n互质的的数字的个数。 通式 φ(x)=x* (1-1/p1)* (1-1/p2)* (1-1/p3)* (1-1/p4)……(1-1/pn) 性质 若n为质数 有 phi[n]=n-1当a,b互质时,phi[a*b]=phi[a]*phi[b](a,b 不一定是质数)当p是质数,n=kp时,phi[n*p]=phi[n]*p 欧拉
数论之快速幂 模板: int quick_pow(int a,int b,int P) { int res=1; while(b) { if(b&1) res=(long long)res*a%P; a=(long long)a*a%P; b>>=1; } return res; } 注意运算时可能会爆int所以要转换为long long
原题链接 考察:贪心 思路: 每\(k-1\)个间隔放,有多就从前往后放.有一些坑点要注意: \(n%k\)的位置和间隔的位置可以放置\(m\)个,这时需要特判\(res\)的初始值. 不能直接用左移运算符算加倍的结果.... Code #include <iostream> #include <cstring> using namespace std; typ
C++ 实现求最大公约数和最小公倍数,最大公约数辗转相除法: int maxDivisor(int a, int b){ int c = b; while (a%b != 0){ c = a%b; a = b; b = c; } return c; } 辗转相减法: int maxDivisor(int a, int b){ while (a != b){ if (a>b) a = a - b;
%=是赋值运算符的一种,可以快速计算出余值 用法:示例 int a=10; a%=2; System.out.println(a); a%=2 代表的是a除2之后,所得到余数重新赋值给a 这里a=10 a/2之后,所得的余数是0,所以a的值就重新赋值成了0
题目: 判断闰年。 思路: 闰年的判断:(1)普通闰年:可以整除4,不能整除100。 (2)世纪闰年:可以整除400。 输入年份,再判断是否是闰年,是就输出“yes”,不是就输出“no”。 代码: #include<iostream> using namespace std; int main() { int a; cin >> a; if ((a%4 == 0 &&a%100 != 0)
https://codeforc.es/contest/1543 A. Exciting Bets题目大意 刚开始两人手上有a 和 b 元,每次可以增加或减少1元 问最大公因数以及取得最大公因数的最小步骤。 额,题目读错了,以为是求最大公因数和最小公因数,想了想有最小公因数这种东西吗???离谱 题解
#include <bits/stdc++.h> using namespace std; using ll = long long ; ll euler(ll n){ ll k=n; for(ll i=2;i*i<=n;i++) if(n%i==0){ k-=k/i; while(n%i==0)n/=i; } if(n>1)k-=k/n; return k; }
SQL LIKE 操作符实例 下面的 SQL 语句选取 name 以字母 "G" 开始的所有客户: 实例 SELECT * FROM WebsitesWHERE name LIKE 'G%'; %a' //以a结尾的数据 'a%' //以a开头的数据 '%a%' //含有a的数据 ‘_a_’ //三位且中间字母是a的 '_a' //两位且
题目描述 小可在爸爸那儿了解到闰年需要满足的条件,现在想编写个程序来判断一个年份是否是闰年。 输入描述 输入只有一行,包含一个整数a(0 < a < 3000) 输出描述 一行,如果公元a年是闰年输出Y,否则输出N 样例 输入 2006 输出 N 提示 公历纪年法中,能被4整除但不能被1
题链 分析 显然容斥 考虑有i个有1个或者有0个的情况放到j个非空集合中的方案 可以发现0很麻烦,所以不妨把0的放到一个垃圾集合中,然后把向垃圾集合中加0表示是垃圾集合 问题变成了i+1个数放到j+1个非空集合的方案,即为第二类斯特林数 统计即可 #include<bits/stdc++.h> #define ll lo
最大公约数 辗转相除法 用第一次的余数作为除数,第一次的除数作为被除数,如此往复; 最后返回a; #include<stdio.h> int main(){ int a,b,c; scanf("%d %d",&a,&b); //a>b while(b){ c=a%b; a=b; b=c; } printf("%d\n",a); return 0; } 递归 int gcd(int a,int b
KeyWords:GCD(greatest common divisor); #include <cstdio> #include <cstdlib> #include <iostream> using namespace std; int gcd(int a,int b){ return a%b?gcd(b,a%b):b; } int main() { int m , n; cin>>m>>n; cou
#include <stdio.h> #include <math.h>#define NUM 500int main(void){ int a,b,c,i,j; for(a=1;a<=NUM;a++) { for(b=0,i=1;i<=a/2+1;i++) { if(a%i==0) { b+=i; } } for(c=0,j=1;j<=b/2+1;j++) { if(b%j==0) { c+=j; } } if