标签:nbsp pac 算术 ios 七夕 利用 max target while
题目链接:https://vjudge.net/problem/HDU-1215#author=0
3 2 10 20Sample Output
1 8 22
思路:这道题数据有点弱,可以直接取巧打个素数表将因子累加即可,但是如果数据很大的话,就要将其优化,就要采取唯一分解的这个算术基本算法
所以要利用其中的因子和来计算:
代码如下:
// // Created by hanyu on 2019/8/10. // #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<vector> #include<queue> #include<cmath> #include<map> #include<stack> using namespace std; const int maxn=1e6+1000; int prime[maxn],isprime[maxn]; void getp() { memset(isprime,1,sizeof(isprime)); int limit=(int)sqrt(maxn*1.0); for(int i=2;i<limit;++i) { if(isprime[i]) { for(int j=i*i;j<maxn;j+=i) { isprime[j]=0; } } } for(int i=2,j=0;i<maxn;i++) if(isprime[i]) prime[j++]=i; } int fenjie(int n) { int num,sum,total=1; int nn=n; int limit=sqrt(maxn*1.0); for(int i=0;prime[i]*prime[i]<=n;++i) { num=sum=1; if(n==1) break; while(n%prime[i]==0) { num*=prime[i]; n/=prime[i]; sum+=num; } total*=sum; } if(n!=1) total*=(n+1); return total-nn; } int main() { getp(); int T; int num; scanf("%d",&T); while(T--) { scanf("%d",&num); if(num==1) { printf("0\n"); continue; } else if(isprime[num]) { printf("1\n"); continue; } else printf("%d\n",fenjie(num)); } return 0; }
七夕节 HDU - 1215 (唯一分解 素数筛法 因子之和加强版)
标签:nbsp pac 算术 ios 七夕 利用 max target while
原文地址:https://www.cnblogs.com/Vampire6/p/11333622.html