problemC

输入描述:
有多组数据,输入数据的第一行为一个正整数,表示字符序列的数目,每组数据为一行字符序列。

输出描述:
对每个字符序列,取出所得整数的最大素因子,若字符序列中没有数字或者找出的整数为0,则输出0,每个整数占一行输出。

示例1
输入

3
sdf0ejg3.f?9f
?4afd0s&2d79*(g
abcde

输出

13
857
0

我的代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<math.h>

using namespace std;


int str2int(string str)			//字符串转int,自动过滤掉字符串中不为数字的部分
{
	int sum = 0;
	for (int i = 0; i < str.length(); i++)
	{	
		if (str[i] >= '0' && str[i] <= '9')
		{
			sum = sum * 10 + str[i] - '0';
		}
	}
	return sum;
}



bool is_prime(int num)
{
	if (num <= 1)
	{
		return false;
	}
	if (num == 2 || num == 3)
	{
		return true;
	}
	else
	{
		if (num % 2 == 0)
		{
			return false;
		}
		else
		{
			if (num % 3 == 0)
			{
				return false;
			}
			else
			{
				int start = 5;
				int distance = 6;
				int i = start;
				for (i; i <= int(sqrt(num)); i+=distance)
				{
					if (num%i == 0)
					{
						return false;
					}
					else if (num % (i + 2)==0)
					{
						return false;
					}
				}
				return true;
			}
		}

	}

	for (int i = 2; i <= int(sqrt(num)); i++)
	{
		if (num % i == 0)
		{
			return false;
		}

	}
	return true;

}
long find_max_prime_factor(long num)
{
	int last_max=0;
	for (int i = 1; i <= sqrt(num); i++)
	{
		if (num %i == 0)
		{
			if (is_prime(num / i))
			{
				return num / i;
			}
			else if(is_prime(i))
			{
				last_max = i;
			}
		}
	}
	return last_max;
}
int main()
{
	long find_max_prime_factor(long num);
	long n;
	
	cin >> n;
	while (n--)
	{
		string temp;
		cin >> temp;
		cout << find_max_prime_factor(str2int(temp))<<endl;
	}
}


看到别人的一个代码:
链接:https://www.nowcoder.com/questionTerminal/2a05dcaa4cde4db989443f206ee3e5c5?f=discussion

int sushu(int a){
    int max = 0;
    for(int i = 2;i*i <= a;i++){
        while(a%i==0){
            if(i>max)
                max = i;
            a/=i;
        }
    }
    return a>max?a:max;
}

和素数筛的知识有关,之后来看看:
https://blog.csdn.net/qq_41653526/article/details/82962841?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值