UVa 10791 唯一分解定理
来源:互联网 发布:知乎哪个国家公司 编辑:程序博客网 时间:2024/06/14 03:44
可以比较两种代码:
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<cstdlib>#include<vector>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)using namespace std;vector<int>prime;vector<int>e;typedef long long ll;const int N=sqrt((2<<31)+0.5);int n;void Euler_prime() { bool vis[N]; memset(vis,0,sizeof(vis)); for(int i=2;i<=N;i++) { if(!vis[i]) e.push_back(i); for(int j=0;j<int(prime.size());j++) { if(prime[j]*i>N) break; vis[prime[j]*i]=1; if(i%prime[j]==0) break; } }} ll solve(int n) { if(n==1) return 2; for(int i=0;i<int(prime.size());i++) { while(n%prime[i]==0) { e[i]++; n/=prime[i]; } if(n==1) break; } ll ans=0,num=0; for(int i=0;i<int(prime.size());++i) { if(e[i]) num++; ans+=pow(prime[i],e[i]); } if(num==1) ans++; return ans;}int main() { Euler_prime(); int tot=0; while(scanf("%d",&n)&&n) { printf("Case %d: %lld\n",++tot,solve(n)); } return 0;}
第二种:
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<cstdlib>#include<vector>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)using namespace std;typedef long long ll;const int N=46340;ll tot,f[N],Case=0,ans;void solve(ll n) { ll m=(ll)sqrt(n+0.5); tot=0; for(ll i=2;i<=m&&n>1;i++) { if(n%i==0) { ll fac=1; while(n%i==0&&n>1) { fac*=i; n/=i; } f[++tot]=fac; } } if(n>1) f[++tot]=n;} int main() { ll n; while(scanf("%lld",&n)&&n) { ans=0; solve(n); if(tot<=1) ans=n+1; else for(ll i=1;i<=tot;i++) ans+=f[i]; printf("Case %lld: %lld\n",++Case,ans); } }
第二种是AC代码
对于此题,我们肯定需要求出其唯一分解后的式子,但是问题在于n是在太大,n=2^31-1;由素数定理可知,小于n的素数最多可以由1e9多个,显然空间是不够的.但是我们可以在分解质因数时发现这样一个事实:如果一直到sqrt(n)之后,其所剩下的质因数必然只会剩下一个或没有,这样我们便只需要到sqrt(n)就可以了,这个范围是46340,完全可以承受
阅读全文
0 0
- UVa 10791 唯一分解定理
- uva 10375 唯一分解定理
- uva 1635 唯一分解定理
- UVA 10375 唯一分解定理
- UVa 10375 唯一分解定理
- uva 10375 唯一分解定理
- uva 10791 Minimum Sum LCM ( 唯一分解定理 )
- UVA 10791 Minimum Sum LCM(唯一分解定理)
- UVA - 10791 - Minimum Sum LCM(唯一分解定理)
- UVA.10791 Minimum Sum LCM (唯一分解定理)
- UVA 1635 Irrelevant Elements [唯一分解定理]
- Choose and divide唯一分解定理/分解/直接 UVA
- 筛法求素数,唯一分解定理(最小公倍数的最小和,uva 10791)
- uva 10375 唯一分解定理 筛法求素数【数论】
- uva 10375 (唯一分解定理+筛素数)
- UVA 10375 Choose and divide(唯一分解定理)
- UVA - 11728 Alternate Task (唯一分解定理)
- uva-1635-Irrelevant Elements-唯一分解定理,组合数
- 利用powershell安装 .NET Framework 3.5.1
- xshell下远程访问Linux系统,在sqlplus下退格键乱码问题
- 响应式开发中的rem
- 互联网架构(6):并发编程--Disruptor并发框架
- centos7下安装php环境
- UVa 10791 唯一分解定理
- Linux系统下安装matlab2016b
- Python学习笔记
- Sublime Text 3配置Go语言开发环境
- Java加密/解密算法快速入门下篇[包括MD5、BASE64、DES、RSA等]
- Strange Way to Express Integers (模线性方程组(扩展欧几里得))
- u3d启用first person controller
- ssh使用默认及非默认22端口密钥登录
- springmvc整合freemarker