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; }
- 
  0@ 2016-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; } }
- 
  0@ 2016-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;
 }
 }
- 
  0@ 2016-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个因数!!!!真特么坑比 
- 
  0@ 2015-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;
 }
 }
 晕,一开始想复杂了,没想到是简单题……&
- 
  0@ 2015-12-13 15:34:06var 
 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.
- 
  0@ 2015-10-31 10:33:31var 
 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.
- 
  0@ 2015-10-24 16:26:38double 
- 
  0@ 2015-10-23 08:32:42Var 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.
- 
  0@ 2015-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;
 }
- 
  0@ 2015-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;
 }
- 
  0@ 2015-08-17 09:12:13Mr.czh是大神,有什么问题找他 
- 
  0@ 2015-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;
 }
- 
  0@ 2015-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;
 }
 }
 }
- 
  0@ 2015-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;
 }
- 
  0@ 2014-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.
- 
  0@ 2014-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.
- 
  0@ 2014-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.
- 
  0@ 2014-10-28 18:43:15var 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.
- 
  0@ 2014-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
- 上传者