Robot HYSBZ - 1408(欧拉函数)

12 篇文章 0 订阅

Robot HYSBZ - 1408(欧拉函数)

题目大意

给出一个已经奇偶分解的数,问其奇数个不同奇素数组成的因数的欧拉函数之和,与偶数个奇素数组成的因数的欧拉函数之和,与剩下的因数的欧拉函数之和分别为多少

解题思路

奇数个不同奇素数组成的因数的欧拉函数之和设为ans0,偶数个奇素数组成的因数的欧拉函数之和设为ans1,据欧拉函数积性函数的性质可以得出递推式
a n s 0 = a n s 0 + a n s 1 ∗ ( p − 1 ) a n s 1 = a n s 1 + ( a n s 0 + 1 ) ∗ ( p − 1 ) ans0=ans0+ans1*(p-1)\\ ans1=ans1+(ans0+1)*(p-1) ans0=ans0+ans1(p1)ans1=ans1+(ans0+1)(p1)
而欧拉函数又有性质 m = ∑ d ∣ n ϕ ( d ) m=\sum_{d\mid n}\phi(d) m=dnϕ(d)

而一不为任何数的老师,因此剩下的因数即为 m − a n s 0 − a n s 1 − 1 m-ans0-ans1-1 mans0ans11

AC代码

#include<bits/stdc++.h>
using namespace std;
const int mod=10000;
int quick_pow(int a,int b)
{
	a=a%mod;
	int ans=1;
	while(b)
	{
		if(b&1) ans=ans*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return ans;
}
int main()
{
	int k;
	scanf("%d",&k);
	int M=1;
	int p,e;
	int ans0=0,ans1=0;
	while(k--)
	{
		scanf("%d%d",&p,&e);
		M=M*quick_pow(p,e)%mod;
		if(p==2) continue;
		int temp0=(ans0+ans1*(p-1)%mod)%mod;
		int temp1=((ans0+1)*(p-1)%mod+ans1)%mod;
		ans0=temp0;ans1=temp1;
	}
	printf("%d\n%d\n%d\n",ans0,ans1,((M-1-ans0-ans1)%mod+mod)%mod);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值