华师一附中OI组
标题:
分解质因数
[打印本页]
作者:
admin
时间:
2018-7-23 09:51
标题:
分解质因数
输入一个自然数分解质因数,比如100=2*2*5*5。
此题考查对循环的理解,要认真思考。
作者:
walk_alone
时间:
2018-7-23 18:49
#include <cstdio>
int judge(int x)
{
for(int i=2;i*i<=x;i++)
if(x%i==0)
return 0;
return 1;
}
int main()
{
int n,flag=0,sign=0;
scanf("%d",&n);
printf("%d=",n);
while(n>1)
for(int i=2;i<=n;i++)
if(judge)
while(n%i==0)
{
printf("%d",i);
n/=i;
if(n!=1)
printf("*");
}
return 0;
}
复制代码
作者:
universehyf
时间:
2018-7-23 19:04
质因数分解
在火车上做的,花了一个多小时,不好,第一次是因为ss和ss表都用的I,循环n多次,第二次是因为ssb用的j,不稳定。第三次才合格。
#include<iostream>
#include<cmath>
using namespace std;
int bg[10010],c[10010];
long long n,nn;
int i,j=1,bj;
bool pd;
bool ss(int y)
{
int sq=sqrt(y);
for(i=2;i<=sq;i++)
if(y%i==0) return false;
return true;
}
void ssb(int x)
{
for(i=3;i<=n;i++)
if(ss(i)) bg[j++]=i;
}
int main()
{
bg[0]=2;cin>>n;nn=n;ssb(n);bj=j-1;
cout<<j;
///for(i=0;i<j;i++) cout<<bg[i];
for(i=0;i<j;i++)
{
while(n%bg[i]==0){c[i]++;n=n/bg[i];}
if(n==1) {bj=i;break;}
}
pd=false;
cout<<nn<<'=';
for(i=0;i<bj;i++)
for(j=0;j<c[i];j++)
{
if(pd) cout<<'*'<<bg[i];
else {cout<<bg[i];pd=true;}
}
if(!pd) cout<<'1';
return 0;
}
复制代码
作者:
七夜劫年
时间:
2018-7-23 19:25
本帖最后由 七夜劫年 于 2018-7-23 19:36 编辑
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n;
int i=2;
int main()
{
cin>>n;
cout<<n<<"=";
while( n != 1 )
{
if( n%i == 0 )
{
cout<<i;
n/=i;
if( n != 1 )
{
cout<<"*";
}
}
else if( n%i != 0 )
{
i++;
}
}
return 0;
}
作者:
黄煦喆
时间:
2018-7-23 19:54
#include<iostream>
using namespace std;
int n,x=2,a[100],t;
int main()
{
cin>>n;cout<<n<<'=';
while(n>1)
{
while(n%x==0)a[++t]=x,n/=x;
x++;
}
for(int i=1;i<t;i++)cout<<a[i]<<'*';
cout<<a[t];
return 0;
}
复制代码
作者:
zhwang
时间:
2018-7-23 19:56
#include<cstdio>
int n;
int biao;
int main()
{
scanf("%d",&n);
if(n==1)
{
printf("1=1*1");
return 0;
}
printf("%d=",n);
for(int i=2;i<=n;i++)
{
biao=1;
for(int j=2;j<i;j++)
{
if(i%j==0)
{
biao=0;
break;
}
}
if(biao==0)
{
continue;
}
while(n%i==0&&n!=i)
{
printf("%d*",i);
n/=i;
}
if(n==i)
{
printf("%d",i);
{
break;
}
}
}
return 0;
}
作者:
张笑宇
时间:
2018-7-23 20:40
#include<iostream>
#include<cmath>
using namespace std;
int n,i;
int zs(int x)
{
for (int k=2;k<=sqrt(x);k++)
if (x%k==0) return 0;
return 1;
}
int main()
{
cin>>n;
cout<<n<<"=";
int i=2;
for (i=2;i<=sqrt(n);i++)
{
if (zs(i))
{
while (n%i==0)
{
n=n/i;
if (n==1)
{
cout<<i;
return 0;
}
else cout<<i<<"*";
}
}
}
return 0;
}
复制代码
作者:
admin
时间:
2018-7-23 21:01
你们再好好想想,怎么都那么复杂呢?11点我来上我的程序。
作者:
白至白
时间:
2018-7-24 09:03
手机端好像就只能这样贴代码了
作者:
白至白
时间:
2018-7-24 09:04
#include<iostream>using namespace std;#define MAX_NUM 1000000char isPrime[MAX_NUM+10];//没给数据范围,先开个一百万吧 int main(){ for(int i=2;i<=MAX_NUM;++i) isPrime[i]=1; for(int i=2;i<=MAX_NUM;++i){ if(isPrime[i]) for(int j=2*i;j<=MAX_NUM;j+=i) isPrime[j]=0; } int n; cin>>n; for(int i=2;i<=MAX_NUM&&n>1;) if(isPrime[i]){ if(n%i==0){ n/=i;cout<<i; if(n!=1)cout<<'*'; } else ++i; } else ++i; return 0;}
作者:
白至白
时间:
2018-7-24 09:09
#include<iostream>
using namespace std;
#define MAX_NUM 1000000
char isPrime[MAX_NUM+10];//没给数据范围,先开个一百万吧
int main(){
for(int i=2;i<=MAX_NUM;++i)
isPrime[i]=1;
for(int i=2;i<=MAX_NUM;++i){
if(isPrime[i])
for(int j=2*i;j<=MAX_NUM;j+=i) isPrime[j]=0; }
int n;
cin>>n;
for(int i=2;i<=MAX_NUM&&n>1;)
if(isPrime[i])
if(n%i==0)
n/=i;cout<<i;
if(n!=1)cout<<'*';
}
else ++i;
}
else ++i;
return 0;
}
作者:
黄诗绮
时间:
2018-7-24 20:22
#include <iostream>
using namespace std;
int main()
{
int n,i=2;
cin>>n;
cout<<n<<'=';
do{
while(n%i==0)
{
cout<<i;
n/=i;
if(n!=1) cout<<'*';
}
i++;
}
while(n!=1);
return 0;
}
复制代码
作者:
admin
时间:
2018-7-24 21:33
黄同学这个做法好!
作者:
倚窗倾听风吹雨
时间:
2018-7-25 07:44
#include<iostream>
#include<cmath>
using namespace std;
int n,m;
int main()
{
cin>>n;
cout<<n<<"=";
int i=2;
while(n>1)
{
while(n%i==0)
{
n=n/i;
cout<<i;
if(n!=1)cout<<"*";
}
i++;
}
return 0;
}
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2