蓝桥杯---试题 算法提高 欧拉函数(数学)

试题 算法提高 欧拉函数

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  老师出了一道难题,小酱不会做,请你编个程序帮帮他,奖金一瓶酱油:
  从1—n中有多少个数与n互质?
  |||||╭══╮ ┌═════┐
  ╭╯让路║═║酱油专用车║
  ╰⊙═⊙╯ └══⊙═⊙═(坑爹的题面格式化,害得我用‘|’来代替空格,复制到记事本上看就变成正版的了)
输入格式
  输入共一行,表示一个整数n。
输出格式
  输出共一行,表示从1—n中与n互质的数的个数。
样例输入
30
样例输出
8
数据规模和约定
  60%的数据≤10^6
  100%的数据≤2*10^9
知识点:(欧拉公式)
蓝桥杯---试题 算法提高 欧拉函数(数学)_第1张图片
code:

#include
using namespace std;
typedef long long ll;

void f(ll n)
{
    ll ans=n;
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
            ans=ans/i*(i-1);
            while(n%i==0){//消除当前质因子
                n/=i;
            }
        }
        if(n==1)break;
    }
    if(n!=1){//n如果不为1说明n为素数,所以于其互质的有n-1个
        ans=ans/n*(n-1);
    }
    printf("%lld",ans);
    return ;
}

int main()
{
    ll n;
    scanf("%lld",&n);
    f(n);
    return 0;
}

你可能感兴趣的:(蓝桥杯)