45 条题解
-
2吴哥——传奇 LV 8 @ 2017-08-25 01:52:12
so water,我时间效率高
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <algorithm> using namespace std; int main() { long long a,b,c,d,e,f,g,n,i,j; scanf("%lld",&n); for(i=3;i<=n;i=i+2) { a=i; if(n%2==0) { a=2; break; } if(n%3==0) { a=3; break; } if(n%a==0) break; } printf("%lld",n/a); return 0; }
-
02016-11-27 19:57:11@
评测结果 编译成功 测试数据 #0: Accepted, time = 0 ms, mem = 512 KiB, score = 10 测试数据 #1: Accepted, time = 0 ms, mem = 508 KiB, score = 10 测试数据 #2: Accepted, time = 0 ms, mem = 508 KiB, score = 10 测试数据 #3: Accepted, time = 0 ms, mem = 512 KiB, score = 10 测试数据 #4: Accepted, time = 0 ms, mem = 512 KiB, score = 10 测试数据 #5: Accepted, time = 0 ms, mem = 508 KiB, score = 10 测试数据 #6: Accepted, time = 0 ms, mem = 508 KiB, score = 10 测试数据 #7: Accepted, time = 0 ms, mem = 508 KiB, score = 10 测试数据 #8: Accepted, time = 0 ms, mem = 504 KiB, score = 10 测试数据 #9: Accepted, time = 0 ms, mem = 504 KiB, score = 10 Accepted, time = 0 ms, mem = 512 KiB, score = 100 代码 #include <cstdio> int main() { int n; scanf("%d",&n); for (int i = 2;i*i <= n;i++) if (!(n%i)) { printf("%d",n/i); return 0; } }
-
02016-11-06 16:51:56@
#include<stdio.h>
int main()
{
long long n,i;
scanf("%lld",&n);
for(i=2;i<=n/2;i++)
if(n%i==0)
{
printf("%lld\n",n/i);
return 0;
}
} -
02016-02-10 21:11:53@
第二个数据(也就是测试数据#1)是错的!!!!!!!!!!!!!
#include <cmath>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;long long n,i,temp1,temp2,flag1;
int main()
{
temp1=1;
temp2=1;
cin>>n;
flag1=trunc(sqrt(n));for (i=2;i<=flag1;i++)
{
if (n%i==0)
{
temp1=i;
break;
}
}for (i=2;i<=flag1;i++)
{
if (n%i==0)
{
temp2=i;
//break;
}
}
//我发现有break就可以AC,没有第二个数据就过不去 于是验证一下 第二个数据不合格if( (temp1<temp2)&&(temp2<n/temp2)&&(n/temp2 < n/temp1) )
{cout<<n/temp1;}
else{cout<<temp1+28;} //这句是为了让别的9个数据WAreturn 0;
}编译成功
测试数据 #0: WrongAnswer, time = 0 ms, mem = 556 KiB, score = 0
测试数据 #1: Accepted, time = 0 ms, mem = 560 KiB, score = 10
测试数据 #2: WrongAnswer, time = 0 ms, mem = 564 KiB, score = 0
测试数据 #3: WrongAnswer, time = 0 ms, mem = 560 KiB, score = 0
测试数据 #4: WrongAnswer, time = 0 ms, mem = 560 KiB, score = 0
测试数据 #5: WrongAnswer, time = 0 ms, mem = 556 KiB, score = 0
测试数据 #6: WrongAnswer, time = 0 ms, mem = 560 KiB, score = 0
测试数据 #7: WrongAnswer, time = 0 ms, mem = 560 KiB, score = 0
测试数据 #8: WrongAnswer, time = 0 ms, mem = 556 KiB, score = 0
测试数据 #9: WrongAnswer, time = 0 ms, mem = 560 KiB, score = 0
WrongAnswer, time = 0 ms, mem = 564 KiB, score = 10这就说明(temp1<temp2)&&(temp2<n/temp2)&&(n/temp2 < n/temp1) 为ture
也就是说这个数据至少有 4个因数!!!!真特么坑比
-
02015-12-14 04:52:10@
#include<stdio.h>
int main()
{
unsigned long n,i;
scanf("%lu",&n);
for(i=2;i<=n/2;i++)
if(n%i==0)
{
printf("%lu",n/i);
return 0;
}
}
晕,一开始想复杂了,没想到是简单题……& -
02015-12-13 15:34:06@
var
i,j:longint;
begin
readln(j);
for i:=(j div 2 ) downto 2 do
if j mod i=0 then
begin
writeln(i);
break
end;
end. -
02015-10-31 10:33:31@
var
i,m,s:longint;
begin
read(s);
for i:=2 to s-1 do
if s mod i =0 then m:=i;
writeln(m);
end. -
02015-10-24 16:26:38@
double
-
02015-10-23 08:32:42@
Var n,i:longint;
Begin
readln(n);
for i:=2 to n do
if (n mod i)=0 then begin
writeln(n div i); exit;end;
end. -
02015-09-26 18:15:03@
#include <iostream>
using namespace std;int main()
{int n;cin>>n;
for (int i=2;i*i<=n;i++)
if (n%i==0){ cout<<n/i;break;}
return 0;
} -
02015-09-13 17:04:41@
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int pd(int x)
{
int i;
for(i=2;i<=sqrt(x);i++){
if(x%2==0){
return 0;
}
}
return 1;
}
int search(int x)
{
int i;
for(i=2;i<=sqrt(x);i++){
if(pd(i)&&pd(x/i)&&x%i==0){
return x/i;
}
}
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",search(n));
return 0;
} -
02015-08-17 09:12:13@
Mr.czh是大神,有什么问题找他
-
02015-07-18 14:21:10@
#include<cstdio>
#include<cmath>
using namespace std;
int tf(int x)
{
if(x<2)return 0;
int t=(sqrt(double(x+1)));
for(int i=2;i<=t;i++)
if(x%i==0)return x/i;
}
int main()
{
int n,i,j,m;
scanf("%d",&n);
printf("%d\n",tf(n));
return 0;
} -
02015-02-23 12:47:54@
编译成功
测试数据 #0: Accepted, time = 0 ms, mem = 280 KiB, score = 10
测试数据 #1: Accepted, time = 0 ms, mem = 276 KiB, score = 10
测试数据 #2: Accepted, time = 0 ms, mem = 280 KiB, score = 10
测试数据 #3: Accepted, time = 0 ms, mem = 280 KiB, score = 10
测试数据 #4: Accepted, time = 0 ms, mem = 280 KiB, score = 10
测试数据 #5: Accepted, time = 0 ms, mem = 276 KiB, score = 10
测试数据 #6: Accepted, time = 0 ms, mem = 280 KiB, score = 10
测试数据 #7: Accepted, time = 0 ms, mem = 276 KiB, score = 10
测试数据 #8: Accepted, time = 0 ms, mem = 280 KiB, score = 10
测试数据 #9: Accepted, time = 0 ms, mem = 276 KiB, score = 10
Accepted, time = 0 ms, mem = 280 KiB, score = 100
代码
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=n-2; i>=2; i=i-2){
if(n%i==0){
cout<<i<<endl;
break;
}
}
} -
02015-02-10 10:58:58@
首先,我竟然傻傻的打表了,这叫求质数的线性筛法。
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int prime[25000];
int psize;
void init(){
bool a[50000];
memset(a, -1, sizeof(a));
int i, j;
psize = 0;
for (i = 2; i < 50000; i++){
if (a[i]){
prime[psize++] = i;
}
for (j = 0; j < psize&&prime[j]*i<50000; j++){
a[prime[j] * i] = false;
if (i%prime[j] == 0)break;
}
}
}
int main(){
freopen("in.txt", "r", stdin);
long long int n;
cin >> n;
init();
int i;
for (i = 0; i < psize; i++){
if (n%prime[i] == 0){
cout << n / prime[i] << endl;
break;
}
}
return 0;
} -
02014-12-18 17:15:30@
让我作一个全面的题解:
顺便让小白的我也总结下,虽然题目比较简单,但是还是要认真对待啊~首先,我们一看到题目,很容易想到枚举,:
1:输入一个n,从2开始到N枚举,找到其(因数)然后用过程从2到N去mod,判断其是不是素数,就得到了思路最简单,但是却最笨的办法。2:优化,知道素数性质的不难明白,最大的素因数顶多是 N div 2 ,因此减少了一半的循环次数。
3:虽然这样做已经很好了,但是如果你懂得一些数学知识,很容易找到一种超简便的办法(这就是下面为毛他们题解没有判断素数的过程)
首先分解因数,只要因数有不是素数的,我们就会再对该因数分解,总之,无论如何,最后分解完一定是一堆素数的乘积。
题目上说,这个数是素数A和素数B的乘积。
那不就结了?已经是2个素数的乘积了,你还要分解么?
所以这个数一定只有4个因数 1,A , B, 已经它自己
所以从2开始枚举到N div 2,找到A就可以找到B为了程序更加效率,因为要找最大的,不妨贪心一下,咱们从大的开始downto下来。
于是得到了最简单的程序。
###block code
program ex;
var n,num,i,ans:longint;
begin
read(n);
for i:=(n div 2) downto 2 do
begin
if n mod i=0 then
begin
ans:=i;
break;
end;
end;
write(ans);
end. -
02014-12-14 18:25:40@
评测状态 Accepted
题目 P1773 质因数
递交时间 2014-12-14 18:24:24
代码语言 Pascal
评测机 上海红茶馆
消耗时间 6 ms
消耗内存 816 KiB
评测时间 2014-12-14 18:24:25评测结果
编译成功测试数据 #0: Accepted, time = 0 ms, mem = 816 KiB, score = 10
测试数据 #1: Accepted, time = 0 ms, mem = 816 KiB, score = 10
测试数据 #2: Accepted, time = 0 ms, mem = 812 KiB, score = 10
测试数据 #3: Accepted, time = 3 ms, mem = 816 KiB, score = 10
测试数据 #4: Accepted, time = 3 ms, mem = 816 KiB, score = 10
测试数据 #5: Accepted, time = 0 ms, mem = 816 KiB, score = 10
测试数据 #6: Accepted, time = 0 ms, mem = 816 KiB, score = 10
测试数据 #7: Accepted, time = 0 ms, mem = 816 KiB, score = 10
测试数据 #8: Accepted, time = 0 ms, mem = 812 KiB, score = 10
测试数据 #9: Accepted, time = 0 ms, mem = 816 KiB, score = 10
Accepted, time = 6 ms, mem = 816 KiB, score = 100
代码
var q,n,p,i:longint;
begin
readln(n);
for i:=2 to n div 2 do
if n mod i=0 then
begin
q:=i;
break;
end;
p:=n div q;
writeln(p);
end. -
02014-10-28 18:43:38@
弱弱AC
var a,b,c,i:longint;
begin
read(a);
for i:=2 to a do
if a mod i=0 then begin
b:=i;
break;
end;
c:=a div b;
writeln(c);
end. -
02014-10-28 18:43:15@
var a,b,c,i:longint;
begin
read(a);
for i:=2 to a do
if a mod i=0 then begin
b:=i;
break;
end;
c:=a div b;
writeln(c);
end. -
02014-10-13 16:24:09@
因为数字为质因数乘积,所以除了本身和1只有两个因数,程序如下
var n,i:longint;
begin
read(n);
for i:=2 to trunc(sqrt(n)) do
if n mod i=0 then begin write(n div i);halt;end;
end.
信息
- ID
- 1773
- 难度
- 3
- 分类
- (无)
- 标签
- (无)
- 递交数
- 2133
- 已通过
- 1044
- 通过率
- 49%
- 被复制
- 4
- 上传者