2019南昌网络赛G. tsy's number

本文深入解析了一个涉及欧拉函数、莫比乌斯反演及复杂数学运算的算法问题,通过巧妙的数学转换,将原始问题转化为易于计算的形式,展示了如何利用线性筛选和前缀和技巧进行高效求解。

题意:\(\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\frac{\phi(i)*\phi(j^2)*\phi(k^3)}{\phi(i)*\phi(j)*\phi(k)}\phi(gcd(i,j,k))\),1e4组询问,每次给\(n(1<=n<=1e7)\).
题解:由\(\phi(x)\)的性质\(x=p_1^{k_1}*p_2^{k_2}*...*p_n^{k_n}\),\(\phi(x)=p_1^{k_1-1}*(p_1-1)*p_2^{k_2-1}*(p_2-1)...*p_n^{k_n-1}*(p_n-1)\),\(\phi(x^2)=p_1^{2*k_1-1}*(p_1-1)*p_2^{2*k_2-1}*(p_2-1)...*p_n^{2*k_n-1}*(p_n-1)\).
\(\phi(x^2)=x*\phi(x)\).
\(\phi(x^3)=x^2*\phi(x)\).
原式化为:
\(\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^nj*k^2*\phi(gcd(i,j,k))\)
\(=\sum_{d=1}^n\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^nj*k^2*\phi(d)[gcd(i,j,k)==d]\)
\(=\sum_{d=1}^n\phi(d)\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^nj*k^2*[gcd(i,j,k)==d]\)
\(f(n)=\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^nj*k^2*[gcd(i,j,k)==d]\).
\(F(n)=\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^nj*k^2*[d|gcd(i,j,k)]\)
\(F(n)=d^3*\sum_{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{n}{d} \right \rfloor}j\sum_{k=1}^{\left \lfloor \frac{n}{d} \right \rfloor}k^2\)
\(F(n)=d^3*\frac{{\left \lfloor \frac{n}{d} \right \rfloor}^3*({\left \lfloor \frac{n}{d} \right \rfloor}+1)^2*({\left \lfloor \frac{n}{d} \right \rfloor}*2+1)}{12}\)
由莫比乌斯反演
\(f(n)=\sum_{x=1}^{{\left \lfloor \frac{n}{d} \right \rfloor}}\mu(x)*(d*x)^3*\frac{{\left \lfloor \frac{n}{d*x} \right \rfloor}^3*({\left \lfloor \frac{n}{d*x} \right \rfloor}+1)^2*({\left \lfloor \frac{n}{d*x} \right \rfloor}*2+1)}{12}\)
原式化为:
\(\sum_{d=1}^n\phi(d)*\sum_{x=1}^{{\left \lfloor \frac{n}{d} \right \rfloor}}\mu(x)*(d*x)^3*\frac{{\left \lfloor \frac{n}{d*x} \right \rfloor}^3*({\left \lfloor \frac{n}{d*x} \right \rfloor}+1)^2*({\left \lfloor \frac{n}{d*x} \right \rfloor}*2+1)}{12}\)
\(=\sum_{t=1}(t)^3*\frac{{\left \lfloor \frac{n}{t} \right \rfloor}^3*({\left \lfloor \frac{n}{t} \right \rfloor}+1)^2*({\left \lfloor \frac{n}{t} \right \rfloor}*2+1)}{12}\sum_{d|t}\phi(d)*\mu(\frac{t}{d})\)
假设\(g(n)=\sum_{d|n}\phi(d)*\mu(\frac{n}{d})\),g是积性函数,考虑线筛求g,只需考虑递推求\(g(p^k)\)
\(g(p^k)=\sum_{i=0}^k\phi(p^i)*\mu(p^{k-i})\)
由莫比乌斯函数性质\(g(p^k)=phi(p^k)*\mu(1)+phi(p^{k-1})*\mu(p)=\phi(p^k)-\phi(p^{k-1})\)
\(k==1\)\(g(p)=p-2\).
\(k!=1\)\(g(p^k)=p^{k-2}*(p-1)^2\)
线筛求g,之后和\(i^3\)一起求前缀和,然后每次询问分块即可
注意模数是\(2^{30}\)没法直接求12的逆元,要先除去4再求3和模数的逆元(扩展gcd)

//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize(4)
//#pragma GCC optimize("unroll-loops")
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include<bits/stdc++.h>
#define fi first
#define se second
#define db double
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 1073741824
#define ld long double
//#define C 0.5772156649
//#define ls l,m,rt<<1
//#define rs m+1,r,rt<<1|1
#define pll pair<ll,ll>
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
#define ull unsigned long long
//#define base 1000000000000000000
#define fin freopen("a.txt","r",stdin)
#define fout freopen("a.txt","w",stdout)
#define fio ios::sync_with_stdio(false);cin.tie(0)
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline void sub(ll &a,ll b){a-=b;if(a<0)a+=mod;}
inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
template<typename T>inline T const& MAX(T const &a,T const &b){return a>b?a:b;}
template<typename T>inline T const& MIN(T const &a,T const &b){return a<b?a:b;}
inline ll qp(ll a,ll b){ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
inline ll qp(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c,b>>=1;}return ans;}

using namespace std;

const ull ba=233;
const db eps=1e-5;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=10000000+10,maxn=1000000+10,inf=0x3f3f3f3f;

ll f[N];
int prime[N],cnt,num[N];
bool mark[N];
void init()
{
    f[1]=1;
    for(int i=2;i<N;i++)
    {
        if(!mark[i])prime[++cnt]=i,f[i]=i-2,num[i]=1;
        for(int j=1;j<=cnt&&i*prime[j]<N;j++)
        {
            mark[i*prime[j]]=1;
            if(i%prime[j]==0)
            {
                num[i*prime[j]]=num[i]+1;
                if(num[i]==1)
                {
                    if(prime[j]==2)f[i*prime[j]]=f[i/prime[j]];
                    else f[i*prime[j]]=f[i]/(prime[j]-2)*(prime[j]-1)*(prime[j]-1);
                }
                else f[i*prime[j]]=f[i]*prime[j];
                break;
            }
            f[i*prime[j]]=f[i]*f[prime[j]];
            num[i*prime[j]]=1;
        }
    }
    for(int i=1;i<N;i++)
        f[i]=(f[i-1]+f[i]*i%mod*i%mod*i%mod)%mod;
}
int main()
{
    ll gan=715827883;
    init();
    int T;scanf("%d",&T);
    while(T--)
    {
        int n;scanf("%d",&n);
        ll ans=0;
        for(int i=1,j;i<=n;i=j+1)
        {
            j=n/(n/i);
            ll te=n/i,pp=(f[j]-f[i-1]+mod)%mod;
            if(te%2==0)
            {
                add(ans,(te/2)*(te/2)%mod*te%mod*(te+1)%mod*(te+1)%mod*(te*2+1)%mod*pp%mod*gan%mod);
            }
            else
            {
                add(ans,te*te%mod*te%mod*((te+1)/2)%mod*((te+1)/2)%mod*(te*2+1)%mod*pp%mod*gan%mod);
            }
        }
        printf("%lld\n",ans);
    }
    return 0;
}
/********************

********************/

转载于:https://www.cnblogs.com/acjiumeng/p/10743919.html

<think>好的,用户现在遇到了Android Studio 2019项目中多个依赖库无法解析的问题。需要仔细分析他的情况。根据用户提供的引用内容,之前他遇到了Gradle版本过旧、仓库未定义、依赖冲突等问题。现在用户列出的无法解析的库包括:com.soundcloud.android、me.shaohui.advancedluban、org.devio、cn.bingoogolapple.bga-baseadapter、com.tsy.pay、smartrefresh、zbarLibary。 首先,我需要考虑这些库的来源。有些可能是托管在JCenter或Maven Central,而有些可能需要特定的仓库。例如,JCenter已经停止服务,可能导致依赖无法下载。用户之前的问题中提到“no repositories are defined”,所以需要检查项目的仓库配置是否正确。 其次,用户可能在使用旧版本的Gradle插件,导致无法正确解析依赖。Android Studio 2019默认的Gradle版本可能较旧,需要升级或调整版本兼容性。另外,用户之前的错误涉及到AAPT2版本问题,可能相关插件版本不兼容,需要匹配Gradle插件和Gradle版本。 接下来,需要逐个分析用户提到的每个依赖库,确定它们的正确仓库地址和可用性。例如,com.soundcloud.android可能托管在Maven Central,而cn.bingoogolapple可能使用JitPack。如果某些库已经迁移到其他仓库,用户需要添加对应的仓库地址。 同时,用户可能没有正确配置仓库,比如缺少google()、mavenCentral()或jitpack.io。需要指导用户检查build.gradle中的repositories块,确保所有必要的仓库都被包含。此外,有些库可能需要特定的版本号,或者已经过时,需要寻找替代方案或升级版本。 另外,用户可能遇到了依赖冲突或Gradle版本不兼容的问题。例如,Gradle 7.x旧版Android Gradle插件不兼容,需要确认用户是否错误地升级了Gradle版本。在Android Studio 2019中,建议使用Gradle 5.x版本,因此需要检查gradle-wrapper.properties中的distributionUrl是否正确。 最后,用户可能需要清理和重新构建项目,或者手动下载依赖库。如果某些库已不再维护,可能需要寻找替代库或自行编译添加。例如,zbarLibary可能需要从GitHub仓库克隆并作为模块导入。 总结解决方案步骤:检查仓库配置,添加必要的仓库;调整Gradle和插件版本;处理特定库的依赖问题;清理和重建项目;寻找替代库。需要确保每一步都详细说明,帮助用户逐步解决问题,并验证每个依赖库的可用性。</think>### Android Studio 2019依赖解析失败解决方案 #### 一、核心问题诊断 1. **仓库配置缺失** 多个依赖项(如`com.soundcloud.android`、`zbarLibary`)需要特定仓库支持,但项目未声明对应仓库[^1] 2. **Gradle版本插件不兼容** AS 2019默认使用Gradle 5.x,若错误升级到Gradle 7.x会导致依赖解析机制失效[^2] 3. **依赖库已迁移或弃用** `bga-baseadapter`等库可能已迁移至Maven Central/JitPack,旧仓库路径失效[^3] #### 二、分步解决方案 ##### 1. 基础仓库配置(项目级build.gradle) ```gradle allprojects { repositories { google() mavenCentral() jcenter() { url "https://jcenter.bintray.com/" } // 兼容旧库 maven { url 'https://jitpack.io' } // 托管zbarLibary等 maven { url 'https://maven.soundcloud.com/artifacts/libs-releases' } // soundcloud专有库 } } ``` ##### 2. 依赖项修正方案 | 依赖标识 | 问题类型 | 修正方案 | |---------|---------|---------| | `com.soundcloud.android` | 私有仓库依赖 | 添加SoundCloud专用仓库[^4] | | `me.shaohui.advancedluban` | JCenter迁移 | 改用JitPack版本:`com.github.shaohui10086:AdvancedLuban:1.5.6` | | `cn.bingoogolapple.bga-baseadapter` | JCenter弃用 | 更新为`com.github.bingoogolapple.BGAAdapter:baseadapter:2.0.1` | | `zbarLibary` | 非标准命名 | 使用社区维护版:`com.github.dm77:lib-zbar:1.9.8` | ##### 3. Gradle版本控制(gradle-wrapper.properties) ```properties distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip ``` ##### 4. 插件版本回退(项目级build.gradle) ```gradle dependencies { classpath 'com.android.tools.build:gradle:3.5.4' // AS 2019支持的最高稳定版 } ``` #### 三、进阶调试技巧 1. **依赖树分析** 执行以下命令定位冲突源: ```bash ./gradlew :app:dependencies --configuration debugCompileClasspath ``` 2. **强制使用指定版本** 对存在版本冲突的依赖: ```gradle configurations.all { resolutionStrategy { force 'com.squareup.okhttp3:okhttp:4.9.3' // 示例强制版本 } } ``` 3. **离线模式验证** 清除缓存后重新下载: ```bash ./gradlew --stop rm -rf ~/.gradle/caches/ ./gradlew --refresh-dependencies ``` #### 四、特殊依赖处理 **支付模块`com.tsy.pay`的解决方案**: 该库已停止维护,建议迁移到: ```gradle implementation 'com.alipay.sdk:alipaysdk-android:15.8.11@aar' implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.0' ``` **SmartRefreshLayout兼容方案**: 使用历史版本适配旧环境: ```gradle implementation 'com.scwang.smart:refresh-layout-kernel:2.0.3' implementation 'com.scwang.smart:refresh-header-classics:2.0.3' ``` #### 五、验证流程 1. 执行`File > Invalidate Caches / Restart` 2. 检查`Gradle Console`的输出警告 3. 通过`Project Structure > Dependencies`可视化检查依赖关系 **注意**:若仍存在`Could not resolve`错误,可尝试手动下载AAR文件: 1. 在https://mvnrepository.com/搜索对应库 2. 下载后放入`app/libs/`目录 3. 添加本地依赖: ```gradle implementation files('libs/zbarLibary-1.8.3.aar') ``` --- ### 相关问题 1. 如何查看Android Studio当前使用的Gradle版本? 2. JCenter仓库关闭后如何迁移旧项目依赖? 3. Gradle插件版本Android Studio版本的对应关系是什么? [^1]: Gradle官方仓库配置指南 [^2]: Android Gradle插件版本兼容性文档 [^3]: JCenter迁移技术公告 [^4]: SoundCloud开发者文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值