模板:数学2

一元线性同余方程组:

x=r[ i ](mod a[ i ])

将两个方程整合成一个,不断整

比如x%8=7,x%11=9  整合成x%88= -57(31)

ll solve(){
    ll M=a[1],R=r[1],x,y,d;
    for(int i=2;i<=n;i++){
        gcd(M,a[i],d,x,y);
        if((R-r[i])%d!=0) return -1;
        x=(R-r[i])/d*x%a[i];
        R-=x*M;
        M=M/d*a[i];
        R%=M;
    }
    return (R%M+M)%M;   //这句能保证回到正整数
}

中国剩余定理:

与上面条件不同,需要除数数组m[i]两两互质。

ll a[maxn],m[maxn];
ll china(int n, ll* a, ll* m){
    ll M = 1, d, y, x = 0;
    for(int i = 0; i<n; i++)
        M *= m[i];
    for(int i = 0; i<n; i++){
        ll w = M / m[i];
        gcd(m[i], w, d, d, y);
        x = (x + y*w*a[i]) % M;
    }
    return (x+M)%M;
}

欧拉函数phi:

通式:

        比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4
 

性质:

1.欧拉函数是 积性函数——若m,n互质, 
 
 
      特殊性质:当n为奇数时, 
   
积性函数 (对于正整数n的一个函数 f(n),当中f(1)=1且当a,b互质,f(ab)=f(a)f(b))
2.若n是质数p的k次幂, 
   
  ,因为除了p的倍数外,其他数都跟n互质。
  若n为质数则 
 
//用公式求 n 的欧拉函数值  
ll eular(ll n){    
    ll i,j,ans=n;    
    for(i=2;i*i<=n;i++){    
        if(n%i==0){    
            ans=ans/i*(i-1);    
            while(n%i==0)    
                n/=i;    
        }    
    }    
    if(n>1)    
        ans=ans/n*(n-1);    
    return ans;    
}   
//线性筛:同时求欧拉函数和质数表  
const int MAXN = 10000000;  
bool check[MAXN + 10];  
ll phi[MAXN + 10], prime[MAXN + 10];  //int数组容易wa  
int tot;    //  素数个数  
  
void phi_and_prime_table(int N){       //phi[0]=0,prime[0]=2  
    memset(check, false, sizeof(check));  
    phi[1] = 1;  
    tot = 0;  
    for (int i = 2; i <= N; i++){  
        if (!check[i]){  
            prime[tot++] = i;  
            phi[i] = i - 1;  
        }  
        for (int j = 0; j < tot; j++){  
            if (i * prime[j] > N){  
                break;  
            }  
            check[i * prime[j]] = true;  
            if (i % prime[j] == 0){  
                phi[i * prime[j]] = phi[i] * prime[j];  
                break;  
            }  
            else  
                phi[i * prime[j]] = phi[i] * (prime[j] - 1);  
        }  
    }  
    return ;  
}
//普通筛,有时甚至比线性筛快
int n,p,tot;  
int phi[N],pri[1000005];  
bool mark[N];  
void getphi(){   //phi[1]=1,pri[1]=2  
    phi[1]=1;  
    for(int i=2;i<=n;i++){  
    if(!mark[i]){phi[i]=i-1;pri[++tot]=i;}  
    for(int j=1;j<=tot;j++){  
        int x=pri[j];  
        if(i*x>n)break;  
        mark[i*x]=1;  
        if(i%x==0){phi[i*x]=phi[i]*x;break;}  
        else phi[i*x]=phi[i]*phi[x];  
        }  
    }  
}
//单独求欧拉函数,较灵活
int p,pr[N];    
bool prime[N];    
int k=0;    
void isprime(){    
    int i,j;    
    memset(prime,true,sizeof(prime));    
    for(i=2;i<N;i++){    
        if(prime[i]){    
            pr[k++]=i;    
            for(j=i+i;j<N;j+=i)     
                prime[j]=false;    
        }    
    }    
}    
int phi(int n){    
    int rea=n,i;    
    for(i=0;pr[i]*pr[i]<=n;i++){    
        if(n%pr[i]==0){    
            rea=rea-rea/pr[i];    
            while(n%pr[i]==0)  n/=pr[i];    
        }    
    }    
    if(n>1)    
      rea=rea-rea/n;    
    return rea%p;    
}


基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值