当前位置: 首页 > article >正文

HDU The Boss on Mars(容斥原理)

题目大意:

ACM 有 n 名员工,现在是他们从老板那里拿薪水的时候了。所有员工都从 1 到 n 编号。原因不明,如果员工的工作编号是 k,他今年可以获得 k^4 Mars 美元。所以为 ACM 工作的员工非常富有。

因为员工人数太多,ACM 的老板必须分配太多的钱,他想明年解雇工作号与 n 共质的人。现在老板想知道解雇后他会节省多少钱。

思路:先求出1~n的每个数的四次方的求和,然后再减去n的因子的四次方的求和。把n的因子的质因子找出来,然后使用容斥原理(我容斥原理用的方法是二进制)去做。

求和公式:1^{4}+2^{4}+3^{4}+...+n^{4}=\frac{n*(n+1)*(2n+1)*(3*n*n+3*n-1)}{30} ( 搜来的 )

代码如下:

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
int vis[10005],prime[10005];
int ksm(int x,int y){
	int ans=1;
	while(y){
		if(y&1) ans=ans*x%mod;
		x=x*x%mod;
		y>>=1;
	}
	return ans;
}
int fun(int x){//求 a ^ 4 的前 x 项和
	return (x*(x+1)%mod*(2*x+1)%mod*(3*x*x%mod+3*x%mod-1+mod)%mod)%mod*ksm(30,mod-2)%mod;
}
signed main(){
	int cnt=0;
	for(int i=2;i<=10000;i++){//埃式筛求 1 ~ 10000 之间的素数 
		if(vis[i]) continue;
		prime[cnt++]=i;
		for(int j=i*2;j<=10000;j+=i){
			vis[j]=1;
		}
	}
	int _;
	cin >> _;
	while(_--){
		int n;
		cin >> n;
		vector<int> v;//存质因数 
		int m=n;
		for(int i=0;i<cnt;i++){//挑选 n 的质因子 
			if(m%prime[i]==0){
				v.push_back(prime[i]);
				while(m%prime[i]==0) m/=prime[i];
			}
		}
		if(m>1) v.push_back(m);//若不为 1 ,说明还留下 1 个质因子 
		int ans=fun(n),res=0;
		for(int i=1;i<(1<<v.size());i++){
			int num=1,sum=0;//num 代表几种不同质因子组成的最小因子 ,sum 代表质因子的个数 
			for(int j=0;j<v.size();j++){ 
				if((i>>j)&1) sum++,num*=v[j];
			}
			int tmp=num*num%mod*num%mod*num%mod*fun(n/num);//求出 num 的倍数(不大于 n ) 的四次方之和。将这个最小因子的四次方之和提出,剩下的就是 a^4 的前几项和
			//例如:2^4 + 4^4 + 6^4 + 8^4 = 2^4 * ( 1^4 + 2^4 + 3^4 + 4^4 )
			if(sum%2) res=(res+tmp)%mod;//容斥原理 
			else res=(res-tmp)%mod;
		}
		ans=((ans-res)%mod+mod)%mod;
		cout << ans << endl;
	}
	return 0;
}


http://www.kler.cn/news/361321.html

相关文章:

  • DevExpress WPF v24.1新版亮点:PDF查看器、富文本编辑器功能升级
  • HTTP: GET vs POST
  • git安装与使用的史诗级教程【git推送文件到远程仓库(GitHub)教程】
  • 基于知识图的电影推荐系统
  • 记录一下乐鑫官方仓库ESP32-CAMERA,在使用esp32s3 wroom n16r8 CAM开发板时遇到的问题。
  • 刷题小记9:回溯
  • to_sql报错not all arguments converted during string formatting
  • 5.redis安装【Docker】
  • vscode 预览markdown 文件
  • 【C++干货篇】——类和对象的魅力(四)
  • 【C++贪心】1536. 排布二进制网格的最少交换次数|1880
  • 【动手学深度学习】8.2. 文本预处理(个人向笔记)
  • 【Flutter】基础组件:图标
  • 特殊类设计与设计模式
  • C# lambda表达式语法简介
  • 安装gpu版本的tensorflow-2.11
  • 简介阿里云大模型的基本概况和产品矩阵
  • HTTP 请求中的Content-Type
  • Wooden UI(木头UI纹理按钮边框 背景图标 带PNG素材)
  • C++sort排序