zoukankan      html  css  js  c++  java
  • cf 151 C. Win or Freeze (博弈 求大数质因子)

    题目

    题意:

    给一个数N,两人轮流操作
    每次将N变为一个N的非1非自身的因数,第一个无法进行操作的人获胜
    问先手是否有必胜策略,如果有的话在第二行输出第一步换成哪个数,如果第一步就不能操作则输出0
    数据规模:N≤10^13。

    思路:

    当N为1或者质数时,先手胜且输出0
    当N恰为两个质数的乘积时,先手负,因为他必须写下一个质数,使后手获胜
    其他情况下,他只要写下N的任意两个质因数的乘积就能获胜。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <vector>
     4 #include <cstdio>
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     long long i;
    10     long long q;
    11     vector<long long>v;
    12     while(cin>>q)
    13     {
    14        v.clear();
    15        for(i = 2; i*i <= q; i++)
    16           while(q%i==0)
    17             {
    18                 v.push_back(i);
    19                 q /= i;
    20             }
    21         if(q>1)
    22             v.push_back(q);
    23 
    24         if(v.size()<2)
    25         printf("1
    0
    ");
    26         else if(v.size()==2)
    27             printf("2
    ");
    28         else
    29             printf("1
    %d
    ", v[0]*v[1]);
    30     }
    31     return 0;
    32 }

    求一个数的质因数的模板:

    可能有重复的, 如输入8  会输出:2 2 2;

    也有可能只有自身,如输入11 输出11

    但是v数组里的数的乘积就等于 输入的数字。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <vector>
     4 #include <cstdio>
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     long long i;
    10     long long q;
    11     vector<long long>v;
    12     while(cin>>q)
    13     {
    14        v.clear();
    15        for(i = 2; i*i <= q; i++)
    16           while(q%i==0)
    17             {
    18                 v.push_back(i);
    19                 q /= i;
    20             }
    21         if(q>1)
    22             v.push_back(q);
    23 
    24         for(i = 0; i < v.size(); i++)
    25         {
    26            cout<<v[i]<<" ";
    27         }
    28         cout<<endl;
    29     }
    30     return 0;
    31 }
  • 相关阅读:
    poj3905 2sat!
    poj3648,2-sat求解
    poj2723 2sat判断解+二分
    hdu3622 2-sat问题,二分+判断有无解即可。
    poj2767,单向连通图判定,缩点+重新建图+新图DFS
    poj2186 求有向图G中所有点都能到达的点的数量
    poj2553 有向图缩点,强连通分量。
    poj 1236+hdu2767 有向图 缩点+看度数(tarjan)
    poj3694+hdu2460 求桥+缩点+LCA/tarjan
    dfs + 最小公倍数 Codeforces Round #383 (Div. 2)
  • 原文地址:https://www.cnblogs.com/bfshm/p/3685177.html
Copyright © 2011-2022 走看看