sgu 330——Numbers

來源:互聯網
上載者:User

Description

Young Andrew is playing yet another numbers game. Initially, he writes down an integer
A. Then, he chooses some divisor d1 of
A, 1 <     d1 <   
A, erases A and writes A1=A+    
d1 instead. Then, he chooses some divisor
d2 of A1, 1 <    
d2 <    A1, erases
A1 and writes A2=A
1+     d2 instead.    

I.e., at any step he chooses some positive integer divisor of the current number, but not 1 and not the whole number, and increases the current number by it.    

Is it possible for him to write number B if he started with number A?

Input

The only line of input contains two integers A and
B
, 2 ≤     A <    B ≤ 10 12.

Output

If there's no solution, output "    

Impossible

" (without quotes) to the only line of output. If there's one, output the sequence of numbers written starting with
A and ending with B, one per line. You're not asked to find the shortest possible sequence, however, you should find a sequence with no more than 500 numbers. It is guaranteed that if there exists some sequence for the given
A and B, then there exists a sequence with no more than 500 numbers in it.

Sample Input

sample input
sample output
12 57
12162427304050525457

sample input
sample output
3 6
Impossible

 

如果A是偶數,B是偶數,則一直加A最大的偶約數。否則,把AB加上或減去最小的奇約數,如果不能把他們變成偶數,則不存在。

剩下的數字不會超過500個。

#include<iostream>#include<cstdio>using namespace std;#define LL __int64LL prime[1000006];bool p[1100006];LL cnt;void init(){LL i,j;cnt=0;for(i=2;i<=1000000;i++)if(!p[i]){prime[++cnt]=i;for(j=i*i;j<=1000000;j+=i)p[j]=1;}}int main(){LL X,Y;LL x,y;init();cin>>X>>Y;if(x==2){cout<<"Impossible"<<endl;return 0;}x=X;y=Y;if(x&1){for(LL i=1;i<=cnt;i++)if(x%prime[i]==0&&prime[i]!=x){x+=prime[i];break;}}if(y&1){for(LL i=1;i<=cnt;i++)if(y%prime[i]==0&&prime[i]!=y){y-=prime[i];break;}}if((x&1)||(y&1)||x>y){cout<<"Impossible"<<endl;return 0;}LL c=0;LL ans[1600];ans[++c]=X;if(x!=X)ans[++c]=x;while(x<y){LL temp=x;while(temp%2==0)temp/=2;temp=x/temp;if(temp==x)temp/=2;while(x+temp>y)temp/=2;x+=temp;ans[++c]=x;}if(y!=Y)ans[++c]=Y;for(LL i=1;i<=c;i++)printf("%I64d\n",ans[i]);return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.