推出来了一个解法,但是感觉复杂度十分玄学,没想到秒过~

Code:

#include <bits/stdc++.h>
#define ll long long
#define N 50000
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
namespace Math
{
ll pp,answer;
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==0)
{
x=1,y=0;
return a;
}
ll ans=exgcd(b,a%b,x,y);
ll tmp=x;
x=y,y=tmp-a/b*y;
return ans;
}
void solve(ll A,ll B,ll C)
{
ll x,y,gcd,b,ans;
gcd = exgcd(A,B,x,y);
if(C%gcd!=0)
{
answer=-1;
return;
}
x*=C/gcd,B/=gcd;
if(B<0) B=-B;
ans=x%B;
if(ans<=0) ans+=B;
answer=ans,pp=B;
}
};
priority_queue<int,vector<int>,greater<int> >q;
map<int,int>mark;
vector<int>v;
int prime[N],vis[N],tot;
void init()
{
int i,j;
for(i=2;i<N;++i)
{
if(!vis[i]) prime[++tot]=i;
for(j=1;j<=tot&&prime[j]*i<N;++j)
{
vis[prime[j]*i]=1;
if(i%prime[j]==0) break;
}
}
}
int main()
{
init();
// setIO("input");
int n,i,j,h,flag=0;
scanf("%d",&n),h=n;
for(i=1;i<=tot&&h>=prime[i];++i)
{
if(h%prime[i]==0)
{
int cc=1;
for(;h%prime[i]==0;h/=prime[i]) cc*=prime[i];
v.push_back(cc);
}
}
if(h!=1) v.push_back(h);
if(n%4==0) flag=1;
int len=v.size();
for(i=0;i<(1<<len);++i)
{
int tmp=1;
for(j=0;(1<<j)<=i;++j)
{
if(i&(1<<j))
tmp*=v[j];
}
int a=tmp,b=n/tmp,dd;
Math::solve(a,b,2);
if(Math::answer!=-1)
{
ll anss=Math::answer*a-1;
while(anss>=0&&anss<n)
{
if(!mark[anss]) mark[anss]=1,q.push(anss);
anss+=Math::pp*a;
}
}
swap(a,b);
Math::solve(a,b,2);
if(Math::answer!=-1)
{
ll anss=Math::answer*a-1;
while(anss>=0&&anss<n)
{
if(!mark[anss]) mark[anss]=1,q.push(anss);
anss+=Math::pp*a;
}
}
if(flag)
{
if(b%2==0) swap(a,b);
a/=2,b*=2;
Math::solve(a,b,2);
dd=Math::pp;
if(Math::answer!=-1)
{
ll anss=Math::answer*a-1;
while(anss>=0&&anss<n)
{
if(!mark[anss])
{
mark[anss]=1;
q.push(anss);
}
anss+=Math::pp*a;
}
}
swap(a,b);
Math::solve(a,b,2);
if(Math::answer!=-1)
{
ll anss=Math::answer*a-1;
while(anss>=0&&anss<n)
{
if(!mark[anss])
{
mark[anss]=1;
q.push(anss);
}
anss+=Math::pp*a;
}
}
}
}
while(!q.empty())
{
printf("%d\n",q.top()); q.pop();
}
return 0;
}

  

最新文章

  1. Jenkins 集成打包和上传 App Store 的冲突
  2. Thread 与 Runnable
  3. 初探appium之元素定位(1)
  4. shell脚本变量定义注意别跟系统变量重名了……
  5. AngularJS应用的解析
  6. Unable to read TLD &quot;META-INF/c.tld&quot;错误
  7. 几个个实用的PHP代码片段【自己备份】
  8. 利用VC助手(VA)添加注释
  9. swift-数组array
  10. 弹性布局Flex的基本语法
  11. Array类的Sort()方法
  12. mxnet框架样本,使用C++接口
  13. CICD自动化发版系统设计简介
  14. 使用Excel过滤重复数据
  15. 异常:分为 严重性错误:Error 异常:Exception
  16. centos7配置openldap服务器
  17. layui栅格布局问题
  18. Java集合入门
  19. Python3中map函数的问题
  20. sql 脚本 oracle scott 用户的四张表导入 mysql 中

热门文章

  1. application.properties参数详解
  2. windows安装npm教程
  3. centos7安装配置NFS文件共享存储
  4. 使用 “Unicode 字符集 ” 使用错误,应该使用 “使用多字节字符集”
  5. 关于C++内存对齐
  6. vue入门:(计算属性和侦听器)
  7. prototype,__proto__,constructor理解
  8. odoo 关系字段(关联关系)
  9. CAN总线简介:如何以编程方式控制汽车
  10. 如何在国内跑Kubernetes的minikube