万绿丛中一点红

#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;
}