龙哥的问题

image

龙哥的问题

这题要求我们求出1~n之间的所有数与n的gcd之和。
我们知道如果两个数互质的话,两个数的gcd就是1,所以res = gcd(1~n, n) = 互质的数 + gcd(不互质的数,n);
而对于两个不互质的我们有gcd(a, n) = gcd,而当我们两边同时除以gcd时我们有gcd(a % gcd, n % gcd) = 1;由此我们可以知道所有不与n互质的数的gcd都可以转换为gcd乘以与n % gcd互质的个数。
所以我们的答案就变成了res = gcd(a, n) + gcd(b % gcd, n % gcd) * gcd, (a与n互质,b与n不互质)
代码:

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <vector>

#define x first
#define y second

using namespace std;

typedef pair<int, int> PII;
typedef long long LL;

const int N = 100010, M = 1e9;

int n;

LL get_euler(int n) 
{
    LL res = n;
    for (int i = 2; i <= n / i; i ++ ) 
        if (n % i == 0) 
        {
            while (n % i == 0) n /= i;
            res = res / i * (i - 1);
        }

    if (n > 1) res = res / n * (n - 1);
    return res;
}

int main() 
{
    int n;
    cin >> n;

    LL res = 0;
    for (int i = 1; i <= n / i; i ++ ) 
        if (n % i == 0) 
        {
            int t = n / i;
            res += get_euler(t) * i;
            if (i != t) res += get_euler(i) * t;
        }

    cout << res << endl;

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
四阶龙格库塔法(Runge-Kutta)是一种数值求解常微分方程的方法,主要用于计算微分方程的数值解。在Matlab中,可以通过编程实现四阶龙格库塔法,也可以使用Matlab自带的ode45函数进行求解。 关于四阶龙格库塔法的Matlab实现,可以通过以下方式获取: 1. 可以在CSDN资源中下载四阶龙格库塔法的Matlab程序和案例。 2. 也可以关注微信公众号Matlab Fans,在公众号中回复BK09获取百度网盘下载链接。 使用四阶龙格库塔法进行数值求解时,可以得到较高的求解精度,即使在步长较大的情况下也能保持较高的精度。相对于改进欧拉算法,四阶龙格库塔法的求解精度有明显提高。此外,自己编程实现四阶龙格库塔法的最大优势在于可以将求解程序和模型描述文件融合起来,解决各类参数时变、条件判断、多模型切换等问题。 需要注意的是,四阶龙格库塔法是一种显式方法,适用于标量或向量函数(y可以是向量)。可以通过上述公式对微分方程进行求解。 如果需要获取更多关于四阶龙格库塔法的信息或具体的案例,请联系作者。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [四阶龙格库塔法(Runge-Kutta)求解常微分方程的 Matlab程序及案例](https://blog.csdn.net/MatlabFans_Mfun/article/details/114231515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [算法-----龙格-库塔法(转)](https://blog.csdn.net/yf210yf/article/details/7638334)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值