3 条题解

  • 1
    @ 2024-4-18 20:24:11
    #include <bits/stdc++.h>
    #define ll long long
    #define IOS ios::sync_wtih_stdio(false), cin.tie(0), cout.tie(0)
    using namespace std;
    int T;
    int main()
    {
        cin >> T;
        while (T--)
        {
            ll n;
            cin >> n;
            ll m = n;
            for (ll i = 2; i * i <= n; i++)
            {
                while (m % i == 0)
                {
                    m /= i;
                    cout << i << " ";
                }
            }
            if (m != 1)
                cout << m;
            cout << endl;
        }
        return 0;
    }
    
    • 0
      @ 2024-3-28 22:01:24

      离谱的是这一题竟然只有1个数据

      题解里已经有用筛法做的了,我就提供一个不用筛法的。

      首先我们从 22~n\sqrt{n} 枚举 nn 的因数。当我们找到一个这样的因数 ii 时,我们就让 nn 一直除以 ii,直到无法整除它为止。

      需要注意这一个过程中并不需要判断 ii 是不是质数,只要找到一个 ii 那么它必然是质因数。证明如下:假设 ii 不是质数,ii 必存在一个质因子 jj,那么 j<ij<i,说明我们之前就已经枚举过了 jjnn 已经把质数 jj 全部分解出去了,当前的 nn 没有了 jj 因子,n%j不为0,与n%i==0矛盾!所以当n%i==0时,ii 必然为一个质数。

      于是这一题我们就能解了,但需要注意剩下的 n>1n>1 的情况,说明剩下的 nn 还是质数。

      部分代码:

      void work(ll n){
          for(ll i=2;i*i<=n;i++)
              while(n%i==0)
                  printf("%lld ",i),n/=i;
          if(n>1)
              printf("%lld",n);
          puts("");
      }
      

      upd. 2024.3.29 更新了更短、更优的代码

      • 0
        @ 2023-12-19 16:35:19
        #include <bits/stdc++.h>
        #define ll long long
        using namespace std;
        const int N = 1000005;
        int T, m, k, L, R, ans, vis[N], pri[N];
        ll n;
        int main(){
        	for (int i = 2; i <= 1000000; ++i){
        		if (vis[i]) continue;
        		pri[++m] = i; // 记录质数
        		for (int j = i + i; j <= 1000000; j += i)
        			vis[j] = 1; // 筛质数
        	}
        	cin >> T;
        	while (T--){
        		cin >> n;
        		for (int i = 1; i <= m; ++i) // 只用质数进行试除
        			while (n % pri[i] == 0)
        				cout << pri[i] << ' ', n /= pri[i];
        		if (n > 1) cout << n;
        		cout << "\n";
        	}
        }
        
        • 1

        信息

        ID
        615
        时间
        1000ms
        内存
        128MiB
        难度
        5
        标签
        递交数
        133
        已通过
        52
        上传者