游客 Signup | Login
中文 | En

1544 - Problem C

对于给定的字符序列,从左至右将所有的数字字符取出拼接成一个无符号整数(字符序列长度小于100,拼接出的整数小于2^31,),计算并输出该整数的最大素因子(如果是素数,则其最大因子为自身)

Input

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

Output

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

Examples

Input

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

Output

13
857
0

Solution C

#include<stdio.h>
#include<ctype.h>

int main() 
{
        char str[128];
        int N,r,i,j;
        for(scanf("%d",&N);N--;) 
		{
                scanf("%s",str);
                for(i=r=0;str[i];i++) 
					if (isdigit(str[i]))
						r=r*10+str[i]-'0';
                if (!r) 
					j=0; 
				else if (r==1) 
					j=1; 
				else 
				{
                        for(i=2;(long)i*i<=r;i++) 
							if (r%i==0) 
							{
                                j=i;
                                while(r%i==0) 
									r/=i;
                        }
                        if (r>1) j=r;
                }
                printf("%d\n",j);
        }
        return 0;
}

Solution C++

#include<stdio.h>
#include<ctype.h>

int main() {
	char str[128];
	int N,r,i,j;
	for(scanf("%d",&N);N--;) {
		scanf("%s",str);
		for(i=r=0;str[i];i++) if (isdigit(str[i])) r=r*10+str[i]-'0';
		if (!r) j=0; else if (r==1) j=1; else {
			for(i=2;(long long)i*i<=r;i++) if (r%i==0) {
				j=i;
				while(r%i==0) r/=i;
			}
			if (r>1) j=r;
		}
		printf("%d\n",j);
	}
	return 0;
}

Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题