Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

跪求错误......数据一大就出不来答案

Posted by vince4053040 at 2010-03-17 16:19:52 on Problem 1845
#include<iostream>
#include<cmath>

using namespace std;

#define MAX_N 100001

/*unsigned long fac(int a, int n)    //鏃堕棿澶嶆潅搴﹀お楂樸€傘€傘€傘€傘€?
{
	int sum = 1;
	for(int i = 1; i <= n; i ++) 
		sum = (sum * a) % 9901;
	return sum;
}*/

unsigned long fac(unsigned long m, unsigned long n)
{
	unsigned long temp;
	if(n == 0 || n == 1)
		return m;
	else if(n & 0x01UL == 0) {      //MOD 2 == 0
		temp = fac(m, n >> 1) % 9901;
		return ((temp * temp) % 9901);
	}
	else      // MOD 2 != 0
		return m * (fac(m, n - 1) )% 9901;
}

int main()
{
	bool prime[MAX_N];
	int i, j;
	int A, B;
	memset(prime, 0, sizeof(prime));
	for(i = 2; i < MAX_N; i ++)
		for(j = 2 * i; j < MAX_N / i; j ++)
			prime[i * j] = 1;
	prime[0] = prime[1] = 1;

	while(scanf("%d%d", &A, &B)) {
		int work = A, flag;
		unsigned long sum = 1;
		for(i = 2; i < MAX_N; i ++) {
			if(!prime[i]) {
				j = 0, flag = 0; 
				while(work % i == 0 && work > 1) {
					work /= i;
					j ++;
					flag = 1;
				}
				if(flag == 1) {
					//sum *= (pow(double(j * i), B + 1) - 1) / (i - 1);
					//answer = fac(i, j * B + 1);
					sum *= (fac(i, j * B + 1) - 1) / (i - 1); 
					//printf("%d ", sum);
					sum %= 9901;
				}
				if(work == 1)
					break;
			}
		}
		printf("%d\n", sum);
	}
	

	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator