ccfcsp 202312-2 因子化简

简介: ccfcsp 202312-2 因子化简

16d44b484ac14c7a8e3508adc3eefa19.jpg

样例输入
3
2155895064 3
2 2
10000000000 10


样例输出
2238728
1
10000000000


42c524eee2da4d8cabeacfd80841681f.jpg

代码:(暴力)

#include <bits/stdc++.h>
using namespace std;
const long long int maxn = 100005;
long long int n, k;
long long int q;
pair<long long int, long long int> tp[maxn];
long long int zhishu[maxn];
bool check(long long int a)
{
    if (a == 1 || a == 0)
        return false;
    for (long long int i = 2; i < a; i++)
    {
        if (a % i == 0)
        {
            return false;
        }
    }
    return true;
}
int main()
{
    cin >> q;
    long long int u = 0;
    for (long long int i = 1; i <= maxn / 2; i++) //0-u
    {
        if (check(i))
        {
            zhishu[u] = i;
            u++;
        }
    }
    for (long long int pp = 0; pp < q; pp++)
    {
        cin >> n >> k;
        long long int count = 0;
        for (long long int j = 0; j < u; j++)
        {
            if (n % zhishu[j] == 0)
            {
                long long int yc = 0;
                while (n % zhishu[j] == 0)
                {
                    yc++;
                    n = n / zhishu[j];
                }
                tp[count].first = yc;
                tp[count].second = zhishu[j];
                count++;
            }
            if (n == 1)
            {
                break;
            }
        }
        long long int ans = 1;
        for (long long int j = 0; j < count; j++)
        {
            if (tp[j].first >= k)
            {
                ans = ans * pow(tp[j].second, tp[j].first);
            }
        }
        cout << ans << endl;
    }
}


2617073cd8d642dd924c9f2da2dc8038.jpg

(还好,卡的不严)

把maxn改成1005后运行时间正常了

035231b5a62e4a91b6b5dd412289843f.jpg

第二次写:

#include <bits/stdc++.h>
using namespace std;
long long int n, k, q;
vector<long long int> zhishu;
bool check(long long int num)
{
  if (num == 1)
    return false;
  if (num == 2)
    return true;
  for (long long int i = 2; i < num; i++)
  {
    if (num % i == 0)
      return false;
  }
  return true;
}
void iszhishu()
{
  zhishu.push_back(1); // 以1开头,质数在begin()+1,end()-1中
  for (long long int i = 2; i <= 1000; i++)//这里缩到1000以内,因为没有很大的数据
  {
    if (check(i))
      zhishu.push_back(i);
  }
  // for (vector<long long int>::iterator it = zhishu.begin(); it != zhishu.end(); it++)
  // {
  //   cout << *it << endl;
  // }
}
int main()
{
 
  cin >> q;
  iszhishu();
  while (q--)
  {
    cin >> n >> k;
    vector<pair<long long int, long long int>> shu; // t,p
    for (vector<long long int>::iterator it = zhishu.end() - 1; it != zhishu.begin(); it--)
    {
      if (n % (*it) == 0)
      {
        long long int u = 0;
        while (n % (*it) == 0)
        {
          u++;
          n /= (*it);
        }
        shu.push_back(make_pair(u, (*it)));
      }
    }
    sort(shu.begin(), shu.end());
    for (vector<pair<long long int, long long int>>::iterator it = shu.begin(); it != shu.end(); it++)
    {
      if ((*it).first < k)
      {
        (*it).first = 0;
      }
      // cout << (*it).first << " " << (*it).second << endl;
    }
    long long int ans = 1;
    for (vector<pair<long long int, long long int>>::iterator it = shu.begin(); it != shu.end(); it++)
    {
      ans *= pow((*it).second, (*it).first);
    }
    cout << ans << endl;
  }
}


031eea564a0b4f2ca11f45f228acb863.jpg

总结:主要是分析质数的范围,遍历取质数的时候不要范围过大,否则会有超时的风险~

相关文章
|
20天前
|
机器学习/深度学习 算法 Serverless
利用无穷级数逼近计算幂运算与开根号——Python实现
使用泰勒级数逼近法,本文介绍了如何用Python计算特殊幂运算,包括分数次幂和开根号。通过定义辅助函数,如`exp`、`getN_minus_n`、`multi`和`getnum`,实现了计算任意实数次幂的功能。实验结果显示,算法能有效计算不同情况下的幂运算,例如`0.09^2`、`1^2`、`0.25^2`、`0.09^(0.5)`、`1^(0.5)`和`0.25^(0.5)`。虽然精度可能有限,但可通过调整迭代次数平衡精度与计算速度。
|
4天前
技术心得记录:可决系数R^2和方差膨胀因子VIF
技术心得记录:可决系数R^2和方差膨胀因子VIF
ccfcsp 202009-2 因子化简
ccfcsp 202009-2 因子化简
|
2月前
|
算法 BI 测试技术
【唯一分解定理 数学】1808好因子的最大数目
【唯一分解定理 数学】1808好因子的最大数目
【唯一分解定理 数学】1808好因子的最大数目
|
11月前
|
存储 Java
数论——因子组合
数论——因子组合
C/C++编程题之质数因子
C/C++编程题之质数因子
|
存储 算法
算法 |【实验5.3】:一元三次方程的根-连续区间的二分搜索求近似解
算法 |【实验5.3】:一元三次方程的根-连续区间的二分搜索求近似解
131 0
算法 |【实验5.3】:一元三次方程的根-连续区间的二分搜索求近似解
7-1 一元多项式求导 (10 分)
7-1 一元多项式求导 (10 分)
91 0
|
机器学习/深度学习 Windows
【组合数学】递推方程 ( 常系数线性齐次递推方程 | 常系数、线性、齐次 概念说明 | 常系数线性齐次递推方程公式解法 | 特征根 | 通解 | 特解 )
【组合数学】递推方程 ( 常系数线性齐次递推方程 | 常系数、线性、齐次 概念说明 | 常系数线性齐次递推方程公式解法 | 特征根 | 通解 | 特解 )
364 0