程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> POJ2992 Divisors 因子和因子個數的應用

POJ2992 Divisors 因子和因子個數的應用

編輯:C++入門知識

本題過題率並不是很高,只有百分之三十不到的樣子,數字很大,看著比較嚇人的,

由於k與n很大,求組合數 肯定不可能,所以要先求約數有多少個,直接進行素因子分解,因為組合數其實 是有公式 的 可以寫成階乘的形式,因此先對階乘進行素因子分解

1.看看題目的數據范圍,大概篩選500以內的素數就可以了

2.然後對每隔階乘進行素因子分解

3.求出組合輸的素因子分解而後便可得到約數的個數;


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define ll long long

#define eps 1e-8

#define inf 0xfffffff
const ll INF = 1ll<<61;

using namespace std;

//vector > G;
//typedef pair P;
//vector > ::iterator iter;
//
//mapmp;
//map::iterator p;
//


bool vis[502];
int a[102],cnt;
int divide[502][102];
ll ans[502][502];

void clear()
{
	memset(divide,0,sizeof(divide));
	memset(ans,0,sizeof(ans));
	memset(vis,false,sizeof(vis));
	memset(a,0,sizeof(a));
	cnt=0;
}

void init()
{
	clear();
	vis[0]=vis[1]=false;
	for(int i=2;i<500;i++)
	{
		if(!vis[i])
			a[cnt++]=i;
		for(int j=0;j>n>>k)
	{
		if(k==0 || n==k)
		{
			puts("1");
			continue;
		}
		cout<

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved