UVA, 10299 Relatives
来源:互联网 发布:省市区县json 编辑:程序博客网 时间:2024/06/10 01:17
题意:直接求输入数字n的欧拉函数。
欧拉函数定义:小于这个数并且与这个数互质的数的个数。
公式:假设p[t]为所有n的素数因子,φ(n)=n/p[1]*(p[1]-1)/p[2]*(p[2]-1).../p[t]*(p[t]-1)。
思路:最大值是10亿,10亿开平方根是3.16W多,保险点可以拿3.5W做为素数的上限,求3.5W以内的所有素数以后,然后从第一个判断是不是素数因子,然后除到没有这个因子为止,再判断后面的素数是不是因子,直到大于3.5W还不是因子,说明最后这个数是大于3.5W的素数因子,于是直接作为p[t]处理。上波代码:
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>using namespace std;#define N 35000vector <int> prime;int IsNotPrime[N+10],prime_num=0;void makeprime(){ for(int i=2;i<N;i++) { if(!IsNotPrime[i]) { prime.push_back(i); prime_num++; } for(int j=0;j<prime_num&&prime[j]*i<=N;j++) { IsNotPrime[prime[j]*i]=1; if(i%prime[j]==0) break; } }}int Euler(int n){ int res=n; if(n==1) return 0; for(int i=0;i<prime_num&&n!=1;i++) { if(n%prime[i]==0) { res=(res/prime[i])*(prime[i]-1);n/=prime[i]; int c=1; while(n%prime[i]==0) { n/=prime[i]; c++; } } } if(n>1) res=(res/n)*(n-1); return res;}int main(){ int n; makeprime(); cin.sync_with_stdio(false); while(cin>>n&&n) { cout<<Euler(n)<<"\n"; } return 0;}
1 0
- UVa 10299-Relatives
- UVa 10299 - Relatives
- UVA, 10299 Relatives
- POJ 2407 Relatives && UVA 10299 Relatives(欧拉函数)
- UVa 10299 :Relatives 欧拉函数
- UVA 10299 Relatives(欧拉函数)
- uva-10299-Relatives-(欧拉函数)
- 1.UVA 10179 -- Irreducable Basic Fractions 2. UVA 10299 -- Relatives
- Relatives
- Relatives
- Relatives
- JOJ1874:Relatives
- pku2407 Relatives
- poj2407-Relatives
- poj2407 Relatives
- [POJ2407] Relatives
- POJ2407 Relatives
- Relatives【POJ2407】
- db.serverStatus()注释
- HTML5第三课时,表格应用以及表格属性
- Java中关于static
- opencv自学之旅 视频读取,摄像头读取
- zepto: 随手记
- UVA, 10299 Relatives
- mysql格式化日期
- OpenStack 业务链networking-sfc介绍 (3)
- android 系统开发资料汇总 2 高性能web服务 tomcat 集群 apache
- [042]各类距离计算函数——Python版
- Linux 环境部署--网络问题
- OkHttp网络请求
- 批量下载图片可复制代码
- c++实验三