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

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

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; }

    推荐阅读