积性函数

积性函数:

一、定义
      积性函数指对于所有互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数。
二、常见的积性函数

       φ(n) -欧拉函数,计算与n互质的正整数之数目

       μ(n) -莫比乌斯函数,关于非平方数的质因子数目

       gcd(n,k)-最大公因子,当k固定的情况

       d(n) -n的正因子数目

       σ(n) -n的所有正因子之和

  σk(n)-因子函数,n的所有正因子的k次之和,当中k可为任何复数

  1(n) -不变的函数,定义为 1(n) = 1 (完全积性)

  Id(n)-单位函数,定义为 Id(n) = n(完全积性)

  Idk(n)-幂函数,对于任何复数、实数k,定义为Idk(n) = n^k(完全积性)

  ε(n) -定义为:若n = 1,ε(n)=1;若 n > 1,ε(n)=0。别称为“对于狄利克雷卷积的乘法单位”(完全积性)

  λ(n) -刘维尔函数,关于能整除n的质因子的数目

  γ(n),定义为γ(n)=(-1)^ω(n),在此加性函数ω(n)是不同能整除n的质数的数目

 

常见积性函数的代码:

性质:

1.若将n表示成质因子分解式

在这里插入图片描述
则有
在这里插入图片描述

 

基本上都是通过这个性质做题,和欧拉筛差不多:

例1:传送门

 

 

 

 这是一个积性函数,满足f(a,b)=f(a)*f(b);

也就是说我们只要把所有质数的N次方算出来即可
合数可以通过质数得出
其他常见的积性函数还有
1.莫比乌斯函数
2.欧拉函数
3.求约数和
4.求约数的个数

 

 

 

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=13000005;
const int mod=1e9+7;
ll prime[maxn],n,f[maxn];
bool biaoji[maxn];
int cnt;
ll qpow(ll a,ll b){
    ll ans=1;
    a%=mod;
    while(b){
        if(b&1){
            ans=(ans*a)%mod;
        }
        a=(a*a)%mod;
        b>>=1;
    }
    return ans;
} 
void inint(ll n){
    f[1]=1;
    for(int i=2;i<=n;i++){
        if(!biaoji[i]){
            prime[++cnt]=i;
            f[i]=qpow(i,n)%mod;
        }
        for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
            f[i*prime[j]]=(1ll*f[i]*f[prime[j]])%mod;
            biaoji[i*prime[j]]=true; 
            if(i%prime[j]==0){
                break;
            }
        }
    }
}
int main(){
    scanf("%lld",&n);
    inint(n);
    ll ans1=0;
    for(int i=1;i<=n;i++){
        ans1=ans1^f[i];
    } 
    printf("%lld\n",ans1);
}

 

 

链接:https://ac.nowcoder.com/acm/contest/392/C
来源:牛客网

输入描述:

输入一个正整数N。

输出描述:

输出答案Ans。
示例1

输入

复制
3

输出

复制
18

说明

N=3时,13=11^3=113=123=82^3=823=833=273^3=2733=27,异或和为18。
示例2

输入

复制
2005117

输出

复制
863466972

备注:

1≤N≤1.3×1071\le N\le 1.3\times10^71N1.3×107
posted @ 2021-01-28 17:32  哎呦哎(iui)  阅读(711)  评论(0编辑  收藏  举报