Advertisement
Guest User

Untitled

a guest
Apr 26th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.59 KB | None | 0 0
  1. #include "std_lib_facilities.hpp"
  2.  
  3. vector<int> t_dziel;
  4.  
  5.  
  6. struct rec_res
  7. {
  8. int result_1 = -1;
  9. int result_2 = -1;
  10. int y = -1;
  11. };
  12.  
  13. struct s2_res
  14. {
  15. int x;
  16. bool flag= 0;
  17. };
  18.  
  19. struct l_res
  20. {
  21. int res_1 = -1;
  22. int res_2 = -1;
  23. };
  24.  
  25.  
  26. s2_res step2(int d)
  27. {
  28. s2_res result;
  29. int x = sqrt(d);
  30. double d_sqrt = sqrt(d);
  31. double d_to_int = x;
  32.  
  33.  
  34. if (d_sqrt!=d_to_int)
  35. {
  36. ++x;
  37. result.x=x;
  38. result.flag=0;
  39. }
  40. else
  41. {
  42. bool fl=1;
  43. result.x = x;
  44. result.flag=fl;
  45. }
  46. t_dziel.push_back(x);
  47.  
  48. return result;
  49. }
  50.  
  51. l_res loop(int x, int d)
  52.  
  53. {
  54. l_res result;
  55.  
  56. while(x<((d+1)/2))
  57. {
  58. int y_2 = 0;
  59.  
  60. y_2 = pow(x,2)-d;
  61.  
  62. int y = sqrt(y_2);
  63. double y_2_sqrt = sqrt(y_2);
  64. double y_to_int = y;
  65.  
  66. if(y_2>0 && y_2_sqrt==y_to_int)
  67. {
  68. result.res_1 = x+y;
  69. result.res_2 = x-y;
  70.  
  71. return result;
  72. }
  73. else
  74. {
  75. ++x;
  76. }
  77. }
  78.  
  79.  
  80. }
  81.  
  82.  
  83. rec_res recursive(int d)
  84. {
  85. rec_res result;
  86.  
  87.  
  88. s2_res s2;
  89. s2 = step2(d);
  90.  
  91. int x = s2.x;
  92.  
  93. if(s2.flag==1)
  94. {
  95. result.result_1 = s2.x;
  96. result.result_2 = s2.x;
  97.  
  98. t_dziel.push_back(s2.x);
  99.  
  100. return result;
  101. }
  102.  
  103. l_res l;
  104. l = loop(x, d);
  105. result.result_1 = l.res_1;
  106. result.result_2 = l.res_2;
  107.  
  108. t_dziel.push_back(l.res_1);
  109. t_dziel.push_back(l.res_2);
  110. return result;
  111.  
  112. /*
  113. while(x<((d+1)/2))
  114. {
  115. int y_2 = 0;
  116.  
  117. y_2 = pow(x,2)-d;
  118.  
  119. int y = sqrt(y_2);
  120. double y_2_sqrt = sqrt(y_2);
  121. double y_to_int = y;
  122.  
  123. if(y_2>0 && y_2_sqrt==y_to_int)
  124. {
  125. result.result_1 = x+y;
  126. result.result_2 = x-y;
  127.  
  128. return result;
  129. }
  130. else
  131. {
  132. ++x;
  133. }
  134. }*/
  135.  
  136. }
  137.  
  138.  
  139. vector<int> bubblesort(vector<int> A)
  140. {
  141. int n = A.size();
  142.  
  143. do
  144. {
  145. for(int i =0; i<n-1;i++)
  146. {
  147. if (A[i]>A[i+1]) swap(A[i],A[i+1]);
  148. }
  149. n=n-1;
  150. } while(n>1);
  151.  
  152. return A;
  153. }
  154.  
  155. int main()
  156. {
  157. vector<int> krotnosci;
  158. vector<int> dzielniki;
  159. //dzielniki.push_back(2);
  160.  
  161. int a =0;
  162.  
  163. cout<<"a: ";
  164. cin>>a;
  165.  
  166. //a = 78;
  167. //a = 5148;
  168. //a=39;
  169. //a = 25740;
  170. //a = 390;
  171. //a = 1170;
  172. //a = 5850;
  173. //a= 6318;
  174. //a=3822;
  175. //a=9438;
  176.  
  177. int d = a;
  178.  
  179. int k =0;
  180.  
  181. while (!(d%2))
  182. {
  183. d/=2;
  184. ++k;
  185. }
  186.  
  187. if(k>0)
  188. {
  189. dzielniki.push_back(2);
  190. krotnosci.push_back(k);
  191. }
  192. //cout<<"\nk = "<<k<<'\n';
  193.  
  194. //cout<<"d = "<<d<<'\n';
  195.  
  196. rec_res result;
  197. rec_res result1, result2;
  198.  
  199. if(d==1)
  200. {
  201. if(a==1)
  202. {
  203. cout<<"a = 1\n";
  204. return 0;
  205. }
  206. }
  207. else{
  208. result = recursive(d);
  209. //cout<<"result = "<<result.result_1<<" "<<result.result_2<<'\n';
  210.  
  211. if(a==1 || a==2)
  212. {
  213. cout<<"v = "<<a<<'\n';
  214. dzielniki.push_back(a);
  215. }
  216. else{
  217. if(result.result_1==-1) dzielniki.push_back(d);
  218.  
  219. else
  220. {
  221.  
  222.  
  223.  
  224.  
  225. if(recursive(result.result_1).result_1==-1) dzielniki.push_back(result.result_1);
  226. if(recursive(result.result_2).result_1==-1) dzielniki.push_back(result.result_2);
  227.  
  228. //cout<<"r1 = "<<result.result_1<<'\n';
  229. //cout<<"r2 = "<<result.result_2<<'\n';
  230.  
  231. rec_res oracle1 = recursive(result.result_1);
  232. rec_res s1 = recursive(result.result_1);
  233.  
  234. rec_res oracle3 = recursive(result.result_1);
  235. rec_res s3 = recursive(result.result_1);
  236.  
  237. /*oracle1 = result;
  238. s1 = result;
  239. oracle3 = result;
  240. s3 = result;*/
  241.  
  242. int c1 = 0, c3 = 0;
  243.  
  244. while(oracle1.result_1!=-1 && oracle3.result_1!=-1)
  245. {
  246. int copy = oracle1.result_1;
  247. oracle1 = recursive(oracle1.result_1);
  248. bool flag1 = 0;
  249.  
  250. //cout<<"o1 = "<<oracle1.result_1<<" "<<oracle1.result_2<<'\n';
  251.  
  252. if(oracle1.result_1!=-1)
  253. {
  254. s1 = recursive(copy);
  255. ++c1;
  256. }
  257. else if (flag1 == 0)
  258. {
  259. dzielniki.push_back(s1.result_1);
  260. dzielniki.push_back(s1.result_2);
  261. flag1 = 1;
  262. }
  263.  
  264.  
  265. int copy3 = oracle3.result_2;
  266. oracle3 = recursive(oracle3.result_2);
  267. bool flag3 = 0;
  268.  
  269. if(oracle3.result_2!=-1)
  270. {
  271. s3 = recursive(copy3);
  272. ++c3;
  273. }
  274.  
  275. else if (flag3 == 0 /*&& war1==0*/)
  276. {
  277. //bool war1 =0;
  278. //if(c1==c3 && c1==0) war1 = 1;
  279. if(c1==c3 && c1==0) c1=0;
  280. else{
  281. dzielniki.push_back(s3.result_1);
  282. dzielniki.push_back(s3.result_2);
  283. flag3 = 1;
  284. }
  285. }
  286.  
  287. }
  288.  
  289. rec_res oracle2 = recursive(result.result_2);
  290. rec_res s2 = recursive(result.result_2);
  291.  
  292. rec_res oracle4 = recursive(result.result_2);
  293. rec_res s4 = recursive(result.result_2);
  294.  
  295. int c2 = 0, c4 = 0;
  296.  
  297. while(oracle2.result_1!=-1 && oracle4.result_1!=-1)
  298. {
  299. int copy = oracle2.result_1;
  300. oracle2 = recursive(oracle2.result_1);
  301. bool flag2 = 0;
  302.  
  303. //cout<<"o1 = "<<oracle2.result_1<<" "<<oracle2.result_2<<'\n';
  304.  
  305. if(oracle2.result_1!=-1)
  306. {
  307. s2 = recursive(copy);
  308. ++c2;
  309. }
  310. else if (flag2 == 0)
  311. {
  312.  
  313. dzielniki.push_back(s2.result_1);
  314. dzielniki.push_back(s2.result_2);
  315. }
  316.  
  317.  
  318. int copy4 = oracle4.result_2;
  319. oracle4 = recursive(oracle4.result_2);
  320. bool flag4 = 0;
  321.  
  322. if(oracle4.result_2!=-1)
  323. {
  324. s4 = recursive(copy4);
  325. ++c4;
  326. }
  327. else if (flag4 == 0)
  328. {
  329. if(c2==c4 && c2==0) c2=0;
  330. else{
  331. dzielniki.push_back(s4.result_1);
  332. dzielniki.push_back(s4.result_2);
  333. flag4 = 1;}
  334. }
  335.  
  336. }
  337. }
  338. }}
  339. /*
  340. cout<<"dzielniki:\n";
  341. for(int i =0; i<dzielniki.size(); ++i)
  342. cout<<dzielniki[i]<<" ";
  343.  
  344. cout<<'\n';
  345. */
  346. //cout<<"c1 = "<<c1<<" c3 = "<<c3<<'\n';
  347.  
  348.  
  349. int max = 0;
  350. for(int i =0; i<dzielniki.size(); ++i)
  351. if(dzielniki[i]>max) max=dzielniki[i];
  352.  
  353. vector<int> ilek(max);
  354.  
  355.  
  356. /*for(int i =1; i<dzielniki.size(); ++i)
  357. {
  358. if(dzielniki[i]==9)
  359. {
  360. dzielniki[i]=3;
  361. ++ilek[dzielniki[i]-1];
  362. }
  363. }*/
  364.  
  365.  
  366.  
  367. cout<<"ilek size = "<<ilek.size()<<'\n';
  368.  
  369. for(int i =0; i<dzielniki.size(); ++i)
  370. {
  371. int helper;
  372.  
  373. helper = recursive(dzielniki[i]).result_1;
  374. //<<cout<<"helper = "<<helper<<'\n';
  375. if(helper != -1)
  376. {dzielniki[i]=helper;
  377. cout<<ilek[4]<<'\n';
  378. //int bzzz=4;
  379. //ilek[10] = 1;
  380. //cout<<"i = "<<i;
  381. }
  382. }
  383.  
  384. for(int i =0; i<dzielniki.size(); ++i)
  385. {
  386. if(dzielniki[i]!=2)
  387. ++ilek[dzielniki[i]-1];
  388. }
  389.  
  390.  
  391. /*cout<<"dzielniki:\n";
  392. for(int i =0; i<dzielniki.size(); ++i)
  393. cout<<dzielniki[i]<<" ";
  394. */
  395. //cout<<"\nk = "<<k<<'\n';
  396. if(dzielniki[0]==2) ilek[0]=k;
  397.  
  398. vector<int> sorted = bubblesort(dzielniki);
  399.  
  400. /*cout<<"\nkrotnosci:\n";
  401. for(int i =0; i<ilek.size(); ++i)
  402. cout<<ilek[i]<<" ";
  403. */
  404.  
  405. int final_size = 0;
  406. for(int i =0; i<ilek.size(); ++i)
  407. {
  408. if(ilek[i]!=0) ++final_size;
  409. }
  410.  
  411. vector<int> final_vector(final_size);
  412. //cout<<"finalsize = "<<final_size<<'\n';
  413.  
  414. int j=0;
  415. for(int i=0; i<final_size;++i)
  416. {
  417. final_vector[i]=sorted[j];
  418. j+=ilek[sorted[j]-1];
  419. if(sorted[i]==2) j=1;
  420. }
  421.  
  422. vector<int> lastkrotnosci(final_size);
  423. int u =0;
  424. for(int i =0; i<ilek.size(); ++i)
  425. {
  426. if(ilek[i]!=0)
  427. {
  428. lastkrotnosci[u]=ilek[i];
  429. ++u;
  430. }
  431. }
  432.  
  433. /*cout<<"\ndzielniki:\n";
  434. for(int i =0; i<sorted.size(); ++i)
  435. cout<<sorted[i]<<" ";
  436. */
  437. cout<<"\ndzielniki:\n";
  438. for(int i =0; i<final_vector.size(); ++i)
  439. cout<<final_vector[i]<<" ";
  440.  
  441. /*cout<<"\nkrotnosci:\n";
  442. for(int i =0; i<ilek.size(); ++i)
  443. cout<<ilek[i]<<" ";
  444. */
  445. cout<<"\nkrotnosci:\n";
  446. for(int i =0; i<lastkrotnosci.size(); ++i)
  447. cout<<lastkrotnosci[i]<<" ";
  448.  
  449. cout<<'\n';
  450. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement