
----数论
欣君
追寻那如樱花般的绚烂
展开
-
51nod 1453 抽彩球
对于每种颜色,为了符合题意可以先将最后的球单独考虑。对于第1种颜色,除去最后的球,有 c[1]-1 个球。在为空的序列上随机放置,有 C(c[i]-1,c[i]-1)=1 种放法,然后将被单独考虑的球放在末尾。对于第2种颜色, 除去最后的球,有 c[2]-1 个球。在已有c[1]个球的序列上随机放置,有 C(c[1]+c[2]-1,c[2]-1) 种方法,然后将被单独考虑的球放在末尾。原创 2016-11-06 15:22:48 · 268 阅读 · 0 评论 -
51nod 1675 序列变换
莫比乌斯反演的题目。 设 f(k)f(k)为满足abx=baya_{b_x}=b_{a_y}的情况下,gcd(x,y)=kgcd(x,y)=k的数量。 F(k)F(k)为满足abx=baya_{b_x}=b_{a_y}的情况下,gcd(x,y)=k的倍数gcd(x,y)=k的倍数的数量。 则 F(k)=∑k|df(d)F(k)=\sum_{k|d} f(d) 由莫比乌斯反演第二种形式,得原创 2017-07-03 17:47:26 · 327 阅读 · 0 评论 -
BZOJ2301 Problem b
莫比乌斯反演+容斥+分块优化莫比乌斯反演学习资料:POPOQQQ的莫比乌斯反演论文那篇论文提及了莫比乌斯反演的第一种形式,另外一种形式可以看莫比乌斯反演定理证明(两种形式)做这道题时,参考了【莫比乌斯反演】[HYSBZ/BZOJ2301]Problem b这篇题解里,感觉莫比乌斯反演的推算部分,i和d弄错了,但是之后的分块优化以及代码是对的。可能博主没注意。//#inclu原创 2017-07-03 16:53:57 · 314 阅读 · 0 评论 -
51nod 1379 索函数
用数学归纳法容易证明出,sor(x)=2^k-1。因此,计算出k即可。对于较小的数,可以直接打表计算。(0~90)对于较大的数,利用斐波那契数的通项公式,忽略其中 ((1-sqrt(5))/2)^n 项,可以计算出答案。#includeusing namespace std;const long long mod=1e9+7;const int limit=90;long l原创 2017-02-15 15:26:59 · 276 阅读 · 0 评论 -
51nod 1536 不一样的猜数游戏
一开始以为询问是在线的,然后各种GG。。。按照题意,询问是预先确定好的,所以直接询问 是素数的多少次方就行了 。例如,n=10时,询问 2 2^2 2^3 3 3^3 5 7。#includeusing namespace std;const int MAXN=1010;int npri[MAXN],pri[MAXN];int main(){ int i,j,ans,转载 2017-01-20 22:57:59 · 396 阅读 · 0 评论 -
51nod 1678 lyk与gcd
记录每个i的素因子,以及每个i的倍数j的a[j]之和。容斥一下。由于只考虑是否互质,因此容斥时考虑素因子即可。#includeusing namespace std;const int MAXN=100100;vector fac[MAXN];int sum[MAXN],npri[MAXN],a[MAXN];int cal1(int x){ int ret=0; while原创 2017-02-08 10:13:53 · 366 阅读 · 0 评论 -
51nod 1259 整数划分 V2
五边形定理。。。。看不懂的说#includeusing namespace std;const int mod=1e9+7;const int MAXN=50050;int dp[MAXN];int main(){ int n,i,j; while(~scanf("%d",&n)) { dp[0]=1; for(i=1;i<=n;i++) { for(j转载 2016-12-18 23:12:29 · 606 阅读 · 0 评论 -
51nod 1586 约数和
每次对a的修改,更新相关的c。#includeusing namespace std;const int MAXN=1000100;long long f[MAXN],c[MAXN];void read(int&a){ char ch;while(!((ch=getchar())>='0')&&(ch<='9')); a=ch-'0';while(((ch=getc原创 2016-12-08 23:45:07 · 284 阅读 · 0 评论 -
51nod 1189 阶乘分数
(x-n!)*(y-n!)=(n!)^2分解 n! 的质因数即可。分解时,需要优化下。#includeusing namespace std;const int MAXN=1000100;const long long mod=1e9+7;int npri[MAXN],prime[MAXN],sum[MAXN];long long powmod(long long x,lon原创 2016-12-08 19:22:00 · 278 阅读 · 0 评论 -
51nod 1262 扔球
欧拉函数基础运用#includeusing namespace std;int oula(int n){ int rea=n; for(int i=2; i*i<=n; i++) { if(n%i==0) { rea=rea-rea/i; while(n%i==0) n/=i; } } if(n>1) rea=rea-rea/n; ret原创 2016-12-07 23:18:57 · 208 阅读 · 0 评论 -
51nod 1616 最小集合
枚举每个数字是否在集合中。#includeusing namespace std;const int MAXN=100100;const int MAXM=1000100;int a[MAXN],sum[MAXM];int main(){ int n,i,j,ans,limit; while(~scanf("%d",&n)) { for(i=1;i<=n;i++)原创 2016-12-07 22:14:22 · 251 阅读 · 0 评论 -
51nod 1537 分解
矩阵快速幂XJB乱搞一下,没严格证明准确性。#includeusing namespace std;const int siz=2;long long mod=1e9+7;struct mtx{ long long a[siz][siz];}unit;mtx multi(mtx m1,mtx m2){ int i,j,k; mtx ret; memset(ret.原创 2016-12-07 20:21:12 · 235 阅读 · 0 评论 -
51nod 1040 最大公约数之和
#includeusing namespace std;long long oula(long long n){ long long rea=n; for(long long i=2; i*i<=n; i++) { if(n%i==0) { rea=rea-rea/i; while(n%i==0) n/=i; } } if(n>1) rea=r原创 2016-11-24 18:44:46 · 198 阅读 · 0 评论 -
1225 余数之和
找规律。。。边界要特殊考虑。。。#includeusing namespace std;const long long mod=1e9+7;long long multimod(long long x,long long y,long long mod){ long long ret=0; while(y) { if(y&1) ret=(ret+x)%mod;原创 2016-12-01 21:34:42 · 282 阅读 · 0 评论 -
51nod 1217 Minimum Modular
#includeusing namespace std;void read(int&a){ char ch;while(!((ch=getchar())>='0')&&(ch<='9')); a=ch-'0';while(((ch=getchar())>='0')&&(ch<='9'))a*=10,a+=ch-'0';}const int MAXN=1000100;i原创 2017-07-20 14:43:24 · 259 阅读 · 0 评论