1 条题解

  • 0
    @ 2026-8-26 10:11:09

    对于每一个可以被选择的 KK,都一定有 N=(aK+1)KbN=(aK+1)K^b 的形式。

    所以 KK 一定是 NNN1N-1 的因数,而这两个数的因数的交集只有 11,而 11 又不合法,所以我们直接根号分别枚举因数即可。

    另外 N=2N=2 的时候非常恶心,所以你得特判。

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N=1e6;
    signed main()
    {
    	int n;cin>>n;int ans=0;
    	for(int i=1;i<=sqrt(n);i++)if(n%i==0)
    	{
    		int i1=n/i,m=n;
    		while(m%i1==0)m/=i1;
    		if(m%i1==1&&i1!=i)ans++;
    		if(i==1)continue;
    		m=n;
    		while(m%i==0)m/=i;
    		if(m%i==1)ans++;
    	}
    	for(int i=1;i<=sqrt(n);i++)if((n-1)%i==0)
    	{
    		if(n==2&&i==1)continue;
    		else if(i*i==n-1||i==1)ans++;
    		else ans+=2;
    	}
    	cout<<ans;
    	return 0;
    }
    • 1

    信息

    ID
    11867
    时间
    2000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    4
    已通过
    2
    上传者