求调
查看原帖
求调
718060
蒋辰逸楼主2024/10/21 20:32

万绿丛中一点红

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,c;
int prime[100010];
int cnt;
int gcd(int a,int b){
	return !b?a:gcd(b,a%b);
}
int phi(int x){
	int ret=x;
	for(int i=2;i*i<=x;i++){
		if(x%i==0)(ret/=i)*=i-1,prime[++cnt]=i;
		while(x%i==0)x/=i;
	}
	if(x!=1)(ret/=x)*=x-1,prime[++cnt]=x;
	return ret;
} 
void dfs(int pos,int x,int dep,int c,int &t){
	if(pos==0){
		t+=c/dep;
		return;
	}
	for(int i=x+1;i<=cnt;i++){
		dfs(pos-1,i,dep*prime[i],c,t);
	}
}
bool check(int x,int ma){
	int ret=0;
	for(int i=1;i<=cnt;i++){
		int t=0;
		dfs(i,0,1,x,t);
		if(i&1)ret+=t;
		else ret-=t;
	}
	ret=x-ret;
	return ret>=ma;
}
signed main(){
	cin>>n>>k>>c;
	int d=phi(n);
	int lft=k/d,rst=k%d;
	int ans=lft*n;
	int lmt=sqrt(n);
	int l=0,r=n,mid;
	while(l<r){
		mid=(l+r)>>1;
		if(check(mid,rst)){
			r=mid;
		}
		else{
			l=mid+1;
		}
	}
//	cout<<r<<endl;
	for(int i=1;i<=c;i++,r++){
		while(gcd(r,n)!=1)r++;
		cout<<ans+r<<' ';
	}
	return 0;
}
2024/10/21 20:32
加载中...