[C++][算法基础]欧拉函数(线性筛)

给定一个正整数 n,求 1∼n 中每个数的欧拉函数之和。

输入格式

共一行,包含一个整数 n。

输出格式

共一行,包含一个整数,表示 1∼n 中每个数的欧拉函数之和。

数据范围

1≤n≤10^{6}

输入样例:
6
输出样例:
12

代码:

#include<iostream>
using namespace std;

const int N = 1000010;
int n,cnt;
int phi[N],att[N],Primes[N];

long long Get_eulers(int n){
    long long res = 0;
    phi[1] = 1;
    for(int i = 2; i <= n;i ++){
         if(att[i] == 0){
             Primes[cnt] = i;
             cnt++;
             phi[i] = i - 1;
         }
         for(int j = 0;Primes[j] <= n / i;j++){
             att[i * Primes[j]] = 1;
             if(i % Primes[j] == 0){
                 phi[i * Primes[j]] = phi[i] * Primes[j];
                 break;
             }else{
                 phi[i * Primes[j]] = phi[i] * (Primes[j] - 1);
             }
         }
    }
    for(int i = 0;i <= n;i ++){
        res += phi[i];
    }
    return res;
}

int main(){
    cin>>n;
    long long ans = Get_eulers(n);
    cout<<ans<<endl;
    return 0;
}

 

### 下载并使用特定版本的 IPPICV 文件 为了在 Linux 上为 OpenCV 使用指定版本的 `ippicv` 文件(如 `ippicv_2022.0.0_lnx_intel64_20240904_general.tgz`),可以按照以下方法操作: #### 1. 手动下载 IPPICV 文件 手动获取所需的 IPPICV 压缩包文件。可以通过官方渠道或其他可信资源下载目标文件 `ippicv_2022.0.0_lnx_intel64_20240904_general.tgz`。 如果无法找到直接链接,可以从类似的开源项目或社区中查找对应的离线镜像地址[^3]。 --- #### 2. 修改 OpenCV 的配置文件 编辑 OpenCV 源码中的 `ippicv.cmake` 配置文件,禁用自动下载功能并将路径指向本地已下载IPPICV 文件。 具体步骤如下: - 进入 OpenCV 源码目录下的 `3rdparty/ippicv` 路径。 - 使用文本编辑器打开 `ippicv.cmake` 文件: ```bash gedit ~/opencv_source/opencv/3rdparty/ippicv/ippicv.cmake ``` - 替换默认的在线下载逻辑为本地路径设置。修改后的关键代码片段应类似于以下内容: ```cmake set(OPENCV_ICV_NAME "ippicv_2022.0.0_lnx_intel64_20240904_general.tgz") set(OPENCV_ICV_HASH "your_file_hash_here") # 设置本地路径作为 IPPICV 的源 set(IPPICV_LOCAL_PATH "/path/to/downloaded/ippicv_2022.0.0_lnx_intel64_20240904_general.tgz") if(EXISTS "${IPPICV_LOCAL_PATH}") message(STATUS "Using local IPPICV file: ${IPPICV_LOCAL_PATH}") configure_file("${IPPICV_LOCAL_PATH}" "${THE_ROOT}/${OPENCV_ICV_NAME}" COPYONLY) else() message(FATAL_ERROR "Local IPPICV file not found at: ${IPPICV_LOCAL_PATH}. Please download it manually.") endif() ``` 上述代码通过检测是否存在本地 IPPICV 文件来决定是否继续编译过程[^4]。 --- #### 3. 准备构建环境 确保已经准备好 OpenCV 和其他依赖项的源码以及必要的工具链。例如,在 Ubuntu 系统上安装基础依赖项: ```bash sudo apt update && sudo apt install build-essential cmake git pkg-config libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev \ gfortran openexr libatlas-base-dev python3-dev python3-numpy libdc1394-22-dev ``` 将下载好的 IPPICV 文件放置到指定位置 `/path/to/downloaded/ippicv_2022.0.0_lnx_intel64_20240904_general.tgz` 并验证其完整性。 --- #### 4. 编译 OpenCV 创建一个新的构建目录并运行 CMake 来生成 Makefile 或 Ninja 构建脚本: ```bash mkdir -p ~/opencv_build && cd ~/opencv_build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -D WITH_CUDA=ON \ -D ENABLE_PRECOMPILED_HEADERS=OFF \ ../opencv/ ``` 完成配置后执行实际编译命令: ```bash make -j$(nproc) sudo make install ``` 此过程中会跳过 IPPICV 自动下载阶段而改用预定义的本地文件[^2]。 --- ### 注意事项 - 如果遇到哈希校验错误,请确认所使用的 IPPICV 文件与其预期的 SHA256 校验值匹配。 - 对于不同版本的 OpenCVIPPICV 组件组合,可能需要调整兼容性参数以满足需求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值