1. 程式人生 > >cf 1062d 思維 尤拉篩變形

cf 1062d 思維 尤拉篩變形

http://codeforces.com/contest/1062/problem/D

題意:給個n ,在n之內 所有(a,b) ,如果存在唯一的x 使a*|x| == b 或者 b* |x| == a   (a,b>2)那麼ans + |x| 求最後結果

思路:如果a%b==0那麼肯定是唯一的x了,列舉(a,b)加上他們的商就好了

   列舉的(a,b)的時候 ,用尤拉篩的思想,第二重用a的倍數來列舉...

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define
mp make_pair #define pii pair<int,int> #define all(v) v.begin(),v.end() const int N = 1e4+4; const int INF = 1E9+4; const ll mod = 1e9+7; int n,m; int a[N],b[N]; vector<int>p; vector<int>V[1000004]; int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n; ll ans
= 0; for(int i=2;i<=n;++i){ for(int j = i+i;j<=n;j+=i){ ans += j/i; } } cout<<ans*4<<endl; return 0; }