0
已解决
宫西诚
修练者
修练者
为了迎接国庆,信息学兴趣小组的同学在辅导老师的带领下,举办了一个盛大的晚会,晚会的第一项内容是做游戏:寻找质因数。老师会让若干个同学来回答问题,每次被提问的同学会拿到一张卡片,卡片上有N个数,他们的任务是求出N个数中质因数最大的数字。对于答对的同学,老师会派发一份精美的礼品。
输入描述 Input Description
第一行,一个整数N,表示数字个数。
接下来N行,每行一个整数Ai,表示给出的数字。
N <= 5000 , Ai <= 20000
输出描述 Output Description
一个整数,表示质因数最大的数字。
0
已采纳
叶子煊
中级光能
中级光能
这题思路我先告诉你
首先找出n个数中的最大数
再for循环(从大往小循环)
{
依次进行指数判断
(判断不会可以再问我)
if判断(如果找到了)
直接break;
}
望采纳
~~~~~~~~~~~~~~~~~~~~~~~~
叶子煊在2018-08-15 17:06:15追加了内容
大体是这样
请自行修改(刚刚现场写的,可能有误)
for(i=max1-1;i>=1;i--)
{
for(j=i-1;j>=1;j++)
{
if(i%j!=0)
{
s++;
}
}
if(s==j-1)
{
s=0;
for(int k=1;k<=n;k++)
{
if(a[k]%i==0)
{
s++;
}
}
if(s==n)
{
cout<<i;
break;
}
}
}
自己定义,哈
叶子煊在2018-08-15 17:06:38追加了内容
@宫西诚
叶子煊在2018-08-15 17:11:20追加了内容
忽略刚刚代码
我看错题了
0
0
叶子煊
中级光能
中级光能
可以和你说,这一题我测试点过了
但超时了
你可以自己再反复斟酌
我的是超时代码
如下:
#include<bits/stdc++.h>
using namespace std;
long long n,j,i,a[100001],b[100001],max1,s=0;
int main()
{
cin>>n;
for(int k=1;k<=n;k++)
{
cin>>a[k];
for(i=a[k];i>=1;i--)
{
s=0;
for(j=i-1;j>=2;j--)
{
if(i%j!=0)
{
s++;
}
else break;
}
if(s==i-2)
{
if(a[k]%i==0)
{
b[k]=i;
break;
}
}
else b[k]=0;
}
}
max1=b[1];
s=1;
for(i=2;i<=n;i++)
{
if(b[i]>max1)
{
s=i;
max1=b[i];
}
}
cout<<a[s];
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~
0
0
张婧晗
初级守护
初级守护
用埃氏筛,会比较快,我试过了不会超时
核心代码
for(int i=1;i<=n;i++){
cin>>a[i];
t=a[i];
for(j=2;j<=t;j++){
if(t%j==0) num=j;
while(t%j==0) t/=j;
}
if(num>maxx){
maxx=num;
maxxx=a[i];
}
}
0
0