1710819070


私信TA

用户名:1710819070

访问量:16114

签 名:

好好学习

等  级
排  名 334
经  验 5382
参赛次数 6
文章发表 21
年  龄 0
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

1+1+1+1+1+1=田

解题思路:

先按照题目的思路先判断是不是素数,是素数就是本身,不是就开始分解

例如3是素数,那么输出3=3:4不是,分解输出4=2*2;

举个简单的例子进行分解 如 64=2*2*2*2*2;

for(i = 2; i <= n; i++)一开始从2开始,那么64%2 == 0,那么2是它的因子,

那么(重点,int t,用 t 保存 64,因为它一直不会变)来了,剩下的因子的乘积就等于 -> t/2=32,我们就从 32 里面取剩下的因子,i 最多取到 32,

那么原来的for循环的 i 的最终值要变成 32,题目又要求是因子必须是质数,那么 i 的初始值 从 i = 2开始。

依此类推,一步一步得分解! 解的过程中,用数组保存质因子。

注意事项:

        代码用C耗时40ms,C++的200多。。。

参考代码:

#include<stdio.h>
#include<math.h>
int prime(int n)  //验证素数 
{
	int i, x, t;
	t =	(int)(sqrt(n));
	for(i = 2; i <= t; i++)
		if(n%i == 0) return 1;
	return 0;
}
void primetwo(int n)  //分解质因数 
{
	int i, a[100], k = 0, t, sum = 1;
	t = n;
	for(i = 2 ; i <= n ; i++)
	{
		if(n % i == 0)
		{
			a[k] = i;
			sum = sum * a[k];
			n = t / sum;			
			i = 1;	k++;					
		}	
	}
	printf("%d=",t);
	for(i = 0 ; i < k ; i++)
	{
		printf("%d",a[i]);		
		if(i < k - 1) printf("*"); //最后一个没有 * 号 
	}	
	printf("\n");
}
int main()
{		
	int a, b, i;
	scanf("%d%d",&a,&b);
	for(i = a; i <= b; i++)
	{
		if(prime(i))  //不是素数 
		{		
			primetwo(i);
		}
		else
		{
			printf("%d=%d\n",i,i);			
		}
	}		
	return 0;	
}


 

0.0分

26 人评分

  评论区

bool ispri(ll x) {
	if (x == 2 || x == 3) return 1;
	for (ll i = 2; i <= sqrt(x); i++) {
		if (x%i==0) {
			return 0;
		}
	}
	return 0;
}

int main() {
	IOS;
	ll a, b;
	cin >> a >> b;
	for (ll i = a; i <= b; i++) {
		ll te = 2;
		cout << i;
		ll res = 1;
		if (ispri(i)) cout << "="<< i << endl;
		else {
			cout << "=";
			while (1) {
				while (i%(res*te)==0 && (res*te)<=i) {
					cout << te;
					res = res * te;
					if (res!=i) cout << "*";
				}
				te++;
				if (res==i) break;
			}
			cout << endl;
		}
	}
	return 0;
}
2020-12-19 20:08:30
#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false), cout.tie(0), cin.tie(0)
#define pb push_back
#define lag(i, k, r) for (int i = k; i < r; i++)
#define rag(i, k, r) for (int i = k; i <= r; i++)
typedef pair<string, int> si;
typedef pair<int, int> ii;
typedef pair<int, string> is;
typedef long long ll;

bool ispri(ll x) {
	if (x == 2 || x == 3) return 1;
	for (ll i = 2; i <= sqrt(x); i++) {
		if (x%i==0) {
			return 0;
		}
	}
	return 0;
}

int main() {
	IOS;
	ll a, b;
	cin >> a >> b;
	for (ll i = a; i <= b; i++) {
		ll te = 2;
		cout << i;
		ll res = 1;
		if
2020-12-19 20:07:49
2020-09-20 10:54:30
菜
#include <iostream>
using namespace std;
int dp[10000];
void f(int a)
{
	if(a==1) 
	{
		return ;
	}
	else 
	{
		int i;
		for(i=2;i<a;++i)
		{
			if(dp[i]==0&&a%i==0)
			{
				cout<<i<<"*";
				a/=i;
				break;
			}
		}
		f(a);
	}
}
int main()
{
	int n,m,i,j;
	cin>>n>>m;
	for(i=n;i<=m;++i)
	{
		for(j=2*i;j<=m;j+=i)
		{
			dp[j]=1;
		}
	}
	for(i=n;i<=m;++i)
	{
		if(dp[i]==0)
		{
			cout<<i<<"="<<i<<endl;
		}
		else 
		{
			f(i);
		}
	}
}
递归加素数筛子
2020-07-29 19:42:23
大神,求问第22行那个i=1的作用是什么?
2020-03-03 16:40:39
  • «
  • 1
  • »