博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 10179 - Irreducable Basic Fractions
阅读量:7031 次
发布时间:2019-06-28

本文共 1357 字,大约阅读时间需要 4 分钟。

  题目大意:给一个正整数n,求出在[1, n]区间内和n互质的正整数的个数。Euler's Totient(欧拉函数)的直接应用。

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 typedef vector
vi; 7 typedef long long ll; 8 #define MAXN 10000000 9 10 bitset
bs;11 vi primes;12 13 void sieve(ll upper)14 {15 bs.set();16 bs.set(0, false);17 bs.set(1, false);18 for (ll i = 2; i <= upper; i++)19 {20 if (bs.test((size_t)i))21 for (ll j = i*i; j <= upper; j++)22 bs.set((size_t)j, false);23 primes.push_back((int)i);24 }25 }26 27 vi primeFactors(ll n)28 {29 vi factors;30 int idx = 0, pf = primes[idx];31 while (n != 1 && (pf*pf <= n))32 {33 while (n % pf == 0)34 {35 n /= pf;36 factors.push_back(pf);37 }38 pf = primes[++idx];39 }40 if (n != 1) factors.push_back(n);41 return factors;42 }43 44 int main()45 {46 #ifdef LOCAL47 freopen("in", "r", stdin);48 #endif49 sieve(MAXN);50 int n;51 while (scanf("%d", &n) && n)52 {53 vi factors = primeFactors(n);54 vi::iterator last = unique(factors.begin(), factors.end());55 int result = n;56 for (vi::iterator it = factors.begin(); it != last; it++)57 result = result - result/(*it);58 printf("%d\n", result);59 }60 return 0;61 }
View Code

 

转载于:https://www.cnblogs.com/xiaobaibuhei/p/3330755.html

你可能感兴趣的文章
掘金翻译计划月报 — 2018 年 2 月
查看>>
Android属性动画
查看>>
渐进式Express源码学习5-全副武装
查看>>
JVM难学?那是因为你没认真看完这篇文章
查看>>
python面试题(五)
查看>>
老司机 iOS 周报 #40 | 2018-10-22
查看>>
VirtualView iOS 模板加载功能实现详解
查看>>
这可能是最好的性能优化教程(二)
查看>>
被马化腾点赞的微信车票设计,背后有哪些故事?
查看>>
Spring理论基础-面向切面编程
查看>>
BloomFilter 原理,实现及优化
查看>>
PHP本地文件包含漏洞环境搭建与利用
查看>>
OGNL设计及使用不当造成的远程代码执行漏洞
查看>>
Vue-cli + express 构建的SPA Blog(采用前后端分离方案)
查看>>
ios中的多播委托
查看>>
Java基础-单例模式
查看>>
轻仿QQ音乐之音频歌词播放、锁屏歌词
查看>>
MongoDB 4.0 RC 版本强势登陆
查看>>
AliOS Things网络适配框架 - SAL
查看>>
iOS 客户端与服务端做时间同步
查看>>