1040 最大公约数之和 (STL)
来源:互联网 发布:没有好奇心 知乎 编辑:程序博客网 时间:2024/05/22 18:22
给出一个n,求1-n这n个数,同n的最大公约数的和。比如:n = 6
1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15
Input
1个数N(N <= 10^9)
Output
公约数之和
Input示例
6
Output示例
15
#include<bits/stdc++.h>using namespace std;vector<int>vv;set<int,greater<int> >ss;set<int,greater<int> >::iterator it,it1 ;map<int,int>pre,a,book;long long ans;void prime_factor(int n){int i,j;for(i=2;(long long)i*i<=n;i++) {while(n%i==0) {vv.push_back(i);n=n/i;}}if(n!=1) vv.push_back(n);}void dfs(int dis,int sum){int i,j;for(i=dis;i<vv.size();i++) {if(book[i]==0) {book[i]=1;ss.insert(sum*vv[i]);dfs(i,sum*vv[i]);book[i]=0;}}}void solve(int n){int i,j,count;int m=vv.size();dfs(0,1);for(it=ss.begin();it!=ss.end();it++) {int t=*it;a[t]=n/t;}for(it=ss.begin();it!=ss.end();it++) { it1=it; it1++;for(;it1!=ss.end();it1++) {if((*it)%(*it1)==0) a[*it1]-=a[*it];}}ans=(long long)0;for(it=ss.begin();it!=ss.end();it++) {int t=*it;ans+=(long long)t*a[t];n-=a[t];}ans+=(long long)n;}int main(){// ios::sync_with_stdio(false); int i,j,n;cin>>n;prime_factor(n);solve(n);cout<<ans<<endl;return 0;}
0 0
- 1040 最大公约数之和 (STL)
- 51nod 1040 最大公约数之和 (数学)
- 1040 最大公约数之和
- 51nod 1040:最大公约数之和
- [51nod]1040 最大公约数之和
- 【51Nod 1040】最大公约数之和
- 【51Nod 1040】最大公约数之和
- 51Nod-1040-最大公约数之和
- 51nod 1040 最大公约数之和
- 【51Nod 1040】 最大公约数之和
- 51nod-1040 最大公约数之和
- 51nod 1040 最大公约数之和
- 51nod 1040 最大公约数之和
- 51Nod 1040 最大公约数之和
- 51nod-1040-最大公约数之和(欧拉函数)
- 51nod 1040 最大公约数之和(欧拉)
- 51NOD 1040 最大公约数之和(欧拉函数 + 转化)
- 51nod 1040 最大公约数之和(欧拉函数)
- jquery刷新页面
- Android Google开源库——Volley的简单使用
- 机器学习9
- Python快速入门
- 如何通过实现parcelable接口传递值对象
- 1040 最大公约数之和 (STL)
- kepware 发生 Setup was unable to initialize your PC错误解决办法
- Science上聚类算法论文——Clustering by fast search and find of density peaks翻译稿
- Win7 图标异常
- 验证码的实现
- Java大数类用法
- 下拉刷新及相关框架
- 《leetCode》:ZigZag Conversion
- Cocos适配带虚拟导航栏手机(HUAWEI 荣耀6 Plus)