@root 李老师救救我

ykj48 流星雨 2024-06-28 20:00:42 22
#include <bits/stdc++.h>
using namespace std;

int g(int s)
{
	for(int i=2;i<=sqrt(s);i++)
	{
		if(s%i==0) return 0;
	}
	return 1;
}
int f(int n)
{
    int i = 2, t = 0;
    if(g(n))
    {
    	cout<<n;
    	return 0;
	}
    while (n % i == 0) {
        n /= i;
        t++;
    }
    if (t == 1)
        printf("%d", i);
    else if(t!=0)
    {
    	printf("%d^%d", i,t);
	}
    i++;
    t = 0;
    while (n != 1) {
        while (n % i == 0) {
            n /= i;
            t++;
        }
        if (t == 1)
            printf(" * %d", i);
    	else if(t!=0)
    	{
    		printf(" * %d^%d", i,t);
		}
        i++;
        t = 0;
    }
    
}
int main()
{
	int n;
	cin>>n;
	f(n);
	return 0;
}
{{ vote && vote.total.up }}

共 6 条回复

root 站长
#include <bits/stdc++.h>
using namespace std;
int main() {
    long long int N, n;
    bool t = 1;
    cin >> N;
    for (long long int i = 2; i * i <= N; i++) {
        if (N % i != 0)
            continue;
        //	if(N==1)	break;
        int cnt = 0;
        while (N % i == 0) {
            cnt++;      //统计i这个因子一共出现多少次
            N = N / i;  //从N当中去掉因子
        }
        //	cout<<"#"<<N<<endl;
        //此时i这个已经不是N的因子了,该输出i这个因子了
        if (t == 1) {
            cout << i;  //先输出底数
            if (cnt > 1) {
                cout << "^" << cnt;
            }
            t = 0;  //标记已经有过输出了
        } else {
            cout << " *";  //第二次就要先输出*了
            cout << " " << i;
            //指数要看cnt的值,如果不为1就输出
            if (cnt > 1) {
                cout << "^" << cnt;
            }
        }
    }
    if (N > 1) {
        if (t == 1) {
            cout << N;
        } else {
            cout << " * " << N;
        }
    }
    return 0;
}
ykj48 流星雨

@root 还是只有80分,有一个超时了

ykj48 流星雨

@root 还是只有80分,有一个超时了

ykj48 流星雨
ykj48 流星雨

咋改?

root 站长
#include <bits/stdc++.h>
using namespace std;

int g(int s)
{
	for(int i=2;i<=sqrt(s);i++)
	{
		if(s%i==0) return 0;
	}
	return 1;
}
int f(int n)
{
    int i = 2, t = 0;
    if(g(n))
    {
    	cout<<n;
    	return 0;
	}
    while (n % i == 0) {
        n /= i;
        t++;
    }
    if (t == 1)
        printf("%d", i);
    else if(t!=0)
    {
    	printf("%d^%d", i,t);
	}
    i++;
    t = 0;
    while (n != 1) {
        while (n % i == 0) {
            n /= i;
            t++;
        }
        if (t == 1)
            printf(" * %d", i);
    	else if(t!=0)
    	{
    		printf(" * %d^%d", i,t);
		}
        i++;
        t = 0;
    }
    
}
int main()
{
	int n;
	cin>>n;
	f(n);
	return 0;
}